Azure active directory Microsoft身份验证请求具有访问令牌的附加作用域

Azure active directory Microsoft身份验证请求具有访问令牌的附加作用域,azure-active-directory,microsoft-graph-api,msal,Azure Active Directory,Microsoft Graph Api,Msal,在我看来,微软的授权非常复杂。有这么多的流量和东西去 所以我现在做的是 使用授权代码流获取特定作用域的令牌。我正在使用以下范围:https://admin.services.crm.dynamics.com//user_impersonation(据我所知,我只能为单个作用域/受众请求令牌) 这个代币很好用。我可以使用收到的承载令牌访问dynamics管理中心 我现在要做的是: 我正在尝试访问Microsoft Graph端点以读取有关用户AAD的信息 我无法使用上面的现有令牌,因为此令牌只有

在我看来,微软的授权非常复杂。有这么多的流量和东西去

所以我现在做的是

  • 使用授权代码流获取特定作用域的令牌。我正在使用以下范围:
    https://admin.services.crm.dynamics.com//user_impersonation
    (据我所知,我只能为单个作用域/受众请求令牌)
  • 这个代币很好用。我可以使用收到的承载令牌访问dynamics管理中心
  • 我现在要做的是:

    • 我正在尝试访问Microsoft Graph端点以读取有关用户AAD的信息
    • 我无法使用上面的现有令牌,因为此令牌只有
      user\u importion
      的作用域
      https://admin.services.crm.dynamics.com/
    • 我必须请求另一个作用域为
      user.read的令牌
    这就是我被困的地方。如何使用现有的access_令牌请求附加作用域

    我可以将
    oauth2/v2.0/token
    端点与刷新令牌结合使用,为另一个作用域请求令牌(
    user.read
    )。这很好,但我不想为此使用刷新令牌,而是使用访问令牌。这有可能而且有意义吗

    这有可能而且有意义吗

    否,无法使用访问令牌获取具有添加范围的新访问令牌

    如前所述,您可以使用刷新令牌为另一个作用域请求新的访问令牌。刷新令牌没有指定的生存期。通常,刷新令牌的生命周期相对较长。虽然刷新令牌在用于获取新的访问令牌时不会被撤销,但您需要丢弃旧的刷新令牌

    POST /{tenant}/oauth2/v2.0/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=6731de76-14a6-49ae-97bc-6eba6914391e
    &scope=https://admin.services.crm.dynamics.com/user_impersonation user.read
    &refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
    &grant_type=refresh_token
    &client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps
    

    您可以参考这一点。

    您正在寻找的场景称为增量同意。这完全可以通过MSAL实现。顺便问一下,如果能知道您正在开发什么平台,那就太好了


    您可以做的是为
    user.read
    请求访问令牌,并期望抛出
    MsalUiRequiredException
    。在其catch中,您与
    user.read
    as scope进行交互调用。通过这种方法,您将实现增量同意。请注意,
    user\u impersonation
    在此之后仍然可以使用,您的令牌缓存现在将具有两个作用域。

    您开发的平台是什么?你能分享一下你如何获得代币的代码吗?我不推荐这种方法。如果您使用的是MSAL,则不应手动创建OAuth端点。MSAL就是为你而建的。这种方法的另一个缺点是缓存中没有此访问令牌。当您使用MSAL获取访问令牌时,您还将在应用程序中包括令牌缓存。