【问题标题】:Web API authentication using OAuth 2.0 token and Azure Active Directory (Without Authentication Server)使用 OAuth 2.0 令牌和 Azure Active Directory 的 Web API 身份验证(无身份验证服务器)
【发布时间】: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


【解决方案1】:

您可以使用此页面了解有关 AAD 签名密钥和处理密钥翻转的更多信息:Signing key rollover in Azure Active Directory

一旦您拥有了签名密钥,就可以使用现有的库(如OWIN)来验证令牌。您也可以尝试按照这样的说明进行操作(尽管文档似乎还没有 100% 完成):Manually validating a JWT access token in a web API

This library 也可用,但我认为 OWIN 应该已经取代了它。

还可以查看this blog post,它对令牌验证有相当深入的了解。

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 2014-12-24
    • 2019-12-02
    • 2015-02-02
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多