Sco*_*son 2 java authentication api azure-active-directory
我有一个用Java构建的Web API,它将数据库信息返回给SPA.我需要在发送响应之前使用AAD Graph API检查用户的组信息.现在,Web API接受请求并读取用户的令牌(eyJ ...).
应用程序准备好代表用户向Graph API发送请求的后续步骤是什么?
我尝试使用Authorization:Bearer ey ...使用用户令牌发送请求,但收到Authentication_MissingOrMalformed错误.我还尝试了对应用程序清单和委派权限的各种编辑,没有运气.
您收到的API访问令牌仅适用于您的API.您需要的是代表当前用户为Azure AD Graph API 获取新的访问令牌.
幸运的是,这正是代表流的目的.来自Azure AD的身份验证方案:
使用OAuth 2.0代表用户标识代表草案规范
下面讨论的流程假定用户已经在另一个应用程序(例如本机应用程序)上进行了身份验证,并且他们的用户身份已被用于获取第一层Web API的访问令牌.
- 本机应用程序将访问令牌发送到第一层Web API.
- 第一层Web API向Azure AD的令牌端点发送请求,提供其客户端ID和凭据以及用户的访问令牌.此外,请求与on_behalf_of参数一起发送,该参数指示Web API正在请求新令牌代表原始用户调用下游Web API.
- Azure AD验证第一层Web API是否有权访问第二层Web API并验证请求,将JWT访问令牌和JWT刷新令牌返回到第一层Web API.
- 通过HTTPS,第一层Web API然后通过在请求的Authorization标头中附加标记字符串来调用第二层Web API.只要访问令牌和刷新令牌有效,第一层Web API就可以继续调用第二层Web API.
请务必配置API以请求Azure AD Graph API的正确权限集.
编辑:如果您自己构建令牌请求,那么您的API将向Azure AD发出的请求代表当前用户向Graph API获取新令牌将是针对以下内容的POST:
https://login.microsoftonline.com/{tenant-id}/oauth2/token
Run Code Online (Sandbox Code Playgroud)
在正文中使用以下参数(未编码,为了便于阅读,实际上这些参数application/x-www-form-urlencoded当然是):
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
requested_token_use=on_behalf_of&
assertion={access-token}&
client_id={api-client-id}&
client_secret={api-client-secret}&
resource=https://graph.windows.net&
scope=openid
Run Code Online (Sandbox Code Playgroud)
{tenant-id}目录标识符(域名或Guid值)在哪里{access-token},您的SPA提供给API的访问令牌(您正在为图谱API交换访问令牌的访问令牌){api-client-id}是您的API的客户端ID,以及{api-client-secret}是API的密码密码凭证.
(注意,为简单起见,此示例使用密码凭据(client_secret)来验证API,尽管它很可能使用由客户端证书签名的断言.)
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |