【问题标题】:Making an OAuth2 call from a Website to an API to another API从网站到 API 到另一个 API 进行 OAuth2 调用
【发布时间】:2017-10-15 12:17:55
【问题描述】:
如果我有一个网站向 API 1 发出请求,它想像这样调用第二个 API 2:
网站 -> API 1 -> API 2
我可以简单地从 API 1 请求中获取 Authorization HTTP 标头的内容并将其传递给 API 2 的请求吗?我的 OAuth2 提供程序是 Azure AD,我正在使用委派权限。
【问题讨论】:
标签:
http
oauth-2.0
authorization
azure-active-directory
【解决方案1】:
您应该遵循“代表”流程来交换您的令牌:
client = website and resource = API 1 用于令牌
client = API 1 and Resource = API 2
阅读更多关于here的信息。
如果 Web API 需要调用另一个下游 Web API,它可以使用代理流来委派用户的身份,并向第二层 Web API 进行身份验证。
使用 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 然后通过在请求的授权标头中附加令牌字符串来调用第二层 Web API。只要访问令牌和刷新令牌有效,第一层 Web API 就可以继续调用第二层 Web API。
可以在here找到集成此流程的示例。