Java 如何使用ADAL JS发布的隐式授权令牌从Web API访问Graph API

Java 如何使用ADAL JS发布的隐式授权令牌从Web API访问Graph API,java,api,authentication,azure-active-directory,Java,Api,Authentication,Azure Active Directory,我有一个内置于Java的Web API,可以将数据库信息返回给SPA。在发送响应之前,我需要使用AAD Graph API检查用户的组信息。现在Web API接受请求并读取用户的令牌(eyJ…) 应用程序准备好代表用户向Graph API发送请求的下一步是什么 我已尝试发送授权请求:持有人ey。。。标头使用用户的令牌,但收到身份验证错误。我还尝试了对应用程序清单的各种编辑和委派权限,但没有成功。您的API收到的访问令牌仅用于您的API。您需要的是代表当前用户为Azure AD Graph API

我有一个内置于Java的Web API,可以将数据库信息返回给SPA。在发送响应之前,我需要使用AAD Graph API检查用户的组信息。现在Web API接受请求并读取用户的令牌(eyJ…)

应用程序准备好代表用户向Graph API发送请求的下一步是什么


我已尝试发送授权请求:持有人ey。。。标头使用用户的令牌,但收到身份验证错误。我还尝试了对应用程序清单的各种编辑和委派权限,但没有成功。

您的API收到的访问令牌仅用于您的API。您需要的是代表当前用户为Azure AD Graph API获取一个新的访问令牌

幸运的是,这正是代表流的目的。发件人:

代表规范草案使用OAuth 2.0的委托用户标识

下面讨论的流程假设用户已在另一个应用程序(如本机应用程序)上进行了身份验证,并且他们的用户身份已用于获取对第一层web API的访问令牌

  • 本机应用程序将访问令牌发送到第一层web API
  • 第一层web API向Azure AD的令牌端点发送请求,提供其客户端ID和凭据以及用户的访问令牌。此外,发送请求时带有代表参数,该参数指示web API正在请求新令牌以代表原始用户调用下游web API
  • Azure AD验证第一层web API是否具有访问第二层web API的权限,并验证请求,将JWT访问令牌和JWT刷新令牌返回给第一层web API
  • 通过HTTPS,第一层web API然后通过在请求的授权头中附加令牌字符串来调用第二层web API。只要访问令牌和刷新令牌有效,第一层web API就可以继续调用第二层web API
  • 请确保配置API以请求Azure AD Graph API的正确权限集

    编辑:如果您自己构造令牌请求,则您的API将代表当前用户向Azure AD发出请求,向Graph API获取新令牌,这将是针对以下内容的帖子:

    https://login.microsoftonline.com/{租户id}/oauth2/token
    
    正文中有以下参数(为了可读性,未编码,实际上这些参数是
    application/x-www-form-urlencoded
    ):

    grant\u type=urn:ietf:params:oauth:grant type:jwt承载&
    请求的\u令牌\u使用=代表\u&
    断言={access token}&
    客户端_id={api客户端id}&
    client_secret={api client secret}&
    资源=https://graph.windows.net&
    scope=openid
    
    其中,
    {tenant id}
    是目录标识符(域名或Guid值),
    {access token}
    是SPA提供给API的访问令牌(您正在交换图形API的访问令牌),
    {API client id}
    是API的客户端id,
    {API client secret}
    是API的秘密密码凭证


    (注意,为简单起见,本例使用密码凭据(
    client\u secret
    )对API进行身份验证,但很可能使用由客户端证书签名的断言。)

    我刚刚添加了一个编辑,其中包含一个示例,说明如何创建令牌请求,将API的访问令牌交换为Graph API的新访问令牌。我真的需要这个答案。我对某些事情应该如何运作有着可怕的误解!