oauth-2.0 在Graph api上使用客户端凭据流会返回没有作用域的access_token

jucafojl  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(168)

我的目标是:我想从我的api中获取一个access_token。目前我正尝试使用客户端凭证流获取访问令牌:

而我成功地得到了回应:

但是这个响应没有任何作用,因为当我在GraphApi端点中使用access_token作为授权参数时,我得到一个错误响应,说我是missing scp or roles参数。我在应用程序中定义了角色,并得到了管理员的批准。可能是什么问题?
下面是解码后的jwt access_token:

{
  "aud": "a********************ed5",
  "iss": "https://sts.windows.net/**********4f-d6b581dd3836/",
  "iat": 1660825101,
  "nbf": 1660825101,
  "exp": 1660829001,
  "aio": "E2ZgYPits***********g8R9TAA==",
  "appid": "eabbd3*************da6990ed5",
  "appidacr": "1",
  "idp": "https://sts.windows.net/5a8f9d89-81da-4218-884f-d6b581dd3836/",
  "oid": "77e***************8085325",
  "rh": "0.AYEAiZ2PWtqBGEKIT9a1gd04NuDTu-rpzyZCiMRhXaaZDtWBAAA.",
  "sub": "77e4***************48085325",
  "tid": "5a8f9d89-8*****************581dd3836",
  "uti": "nl-kk3T*******w2ePAA",
  "ver": "1.0"
}
lymnna71

lymnna711#

我尝试在我的环境中重现相同的结果,并得到以下结果:

我为Azure AD应用程序创建了一个名为**DemoRole**的应用程序角色,如下所示:

  • 转到Azure门户-〉Azure Active Directory -〉应用程序注册-〉您的应用程序-〉应用程序角色 *

我将该DemoRole分配给以下几个用户:

  • 转到Azure -〉Azure Active Directory -〉企业应用程序-〉您的应用程序-〉用户和组 *

现在,我生成了访问令牌,参数如下:

POST https://login.microsoftonline.com/common/oauth2/v2.0/token

client_id = xxxx-xxxx-xxxx
grant_type = client_credentials
client_secret =***************
scope = api://xxxxxxx.xxxx.com/.default

回应:

我破解令牌的时候,也无法获得如下角色:

要获取解码令牌中的**roles**声明,请确保添加自定义API权限并授予管理员许可,如下所示:

转到您的应用程序-〉API权限-〉添加权限-〉我的API-〉您的应用程序名称-〉应用程序权限

x1c4d 1x指令集
在授予管理员许可后,我再次生成访问令牌,并在解码的令牌中获得**roles**声明,如下所示:

相关问题