【问题标题】:Using client credential flow on Graph api returns an access_token without scopes在 Graph api 上使用客户端凭据流返回一个没有范围的 access_token
【发布时间】:2022-08-18 22:18:25
【问题描述】:

这是我的目标:我想从我的 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\"
}

    标签: azure graph oauth-2.0 azure-active-directory microsoft-graph-api


    【解决方案1】:

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

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

    转到 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 -> 您的应用程序名称 -> 应用程序权限

    授予管理员同意后,我再次生成了访问令牌并获得了roles在解码的令牌中声明如下:

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2019-02-12
      相关资源
      最近更新 更多