【发布时间】:2017-07-20 06:48:04
【问题描述】:
有没有一种方法可以在不使用身份验证服务器的情况下对 Active Directory 中的 Microsoft 或 google OAuth 令牌进行身份验证?
这是场景:
客户端应用程序从某些外部服务获取 Microsoft access_token。
客户端应用程序将调用某些安全的 Web API 并将该 access_token 与请求标头一起传递
- 如果客户端传递的 access_token 有效,则 API 将向客户端提供响应。
有没有办法在 API 端验证 access_token?
我对 OAuth 2.0 的正常理解是需要一个身份验证服务器,客户端和 API 都可以与之通信,如下图所示:
但是如果令牌是由某个外部服务提供的,我们可以使用它来验证我们的 Web API。有没有办法实现这种身份验证?
【问题讨论】:
-
在您显示的图表中,外部授权服务器由 Microsoft 拥有和运行。你想把它从图片中删掉吗?您认为需要拥有和运行身份验证服务器的地方是否存在混淆?
-
嗨@ShawnTabrizi,我的要求不是上图所示。我想知道,如果我通过 Microsoft OAuth 2.0 令牌请求调用 Web API,是否有办法验证该令牌,而不管该令牌的创建来源如何,而不使用图中所示的身份验证服务?
-
验证令牌时,您只需检查令牌是否由 Microsoft 签名,方法是查看 MS 公开的公钥,并将其与令牌上的签名进行比较。只要你可以查询签名密钥,你应该可以在任何地方对令牌进行身份验证......也许我误解了。
-
补充@ShawnTabrizi所说的:您可以检查JWT令牌的签名。它使用 AAD 的私钥之一进行签名。您可以下载签名验证所需的公钥。请注意,公钥有时会发生变化,您的应用程序需要定期下载新的。
标签: web-services security asp.net-web-api oauth-2.0 azure-active-directory