【问题标题】:How to obtain public certificate from Azure Active Directory如何从 Azure Active Directory 获取公共证书
【发布时间】:2020-07-07 23:44:34
【问题描述】:

我们基于 .net 核心的 Web api 需要验证从第三方收到的 JWT 访问令牌,但受信任的 AAD。为了进行令牌签名验证,我们的 web api 需要具有可信 AAD 的公共证书。此功能处于 POC 阶段。那么如何获取/下载 AAD 的公共证书(.cer 文件)?

【问题讨论】:

  • 任何帮助下载 AAD 的公共证书(.cer 文件)将不胜感激。令牌消费应用程序需要它(.cer 文件)来进行令牌签名验证。

标签: jwt azure-active-directory certificate asp.net-core-webapi


【解决方案1】:

我建议您使用标准的 JWT Bearer 身份验证方案来为您处理这方面的问题。 你指定 AuthorityClientId 给它,它会处理其余的。

但如果你对细节感到好奇, 我可以解释一下。 首先你取得你的权威,例如https://login.microsoftonline.com/company.com/v2.0(或 https://login.microsoftonline.com/company.com,如果您使用的是 v1 令牌)。 我们将/.well-known/openid-configuration添加到获取元数据URL的权限:https://login.microsoftonline.com/company.com/v2.0/.well-known/openid-configuration

元数据 URL 为我们提供了 JSON,其中包含 jwks_uri 属性。 例如:

"jwks_uri":"https://login.microsoftonline.com/tenant-id-here/discovery/v2.0/keys"

当我们导航到此 URL 时,我们会获得 Azure AD 的公共签名密钥。

不过,这一切都由 JWT Bearer 身份验证处理程序在后台处理,因此您不应该自己实现它。

【讨论】:

  • 请确认我的以下理解,1. 向此元数据 url login.microsoftonline.com/thirdPartyTestAAD.onmicrosoft.com/… 发出请求 2. 然后再次向针对“jwks_uri”提到的 url 发出请求,即“login.microsoftonline.com/208xxx3d-b8c0-47yy-943c-7225m15b7b4g/…”。当我这样做时,它返回 3 组密钥,其中一个必须被视为公钥证书。在我的应用中验证由“thirdPartyTestAAD.onmicrosoft.com”AAD 签名和发布的 JWT?
  • 是的,这就是获取令牌的公共签名密钥的方式。
  • 我对 cer 文件不够熟悉,无法确定是否可以从 JSON 数据构建它。但我猜你可以从那里以某种方式构建那个文件。因为公钥参数在那里。
  • 我认为通常密钥是相同的。至少我还没有遇到它们不同的情况。数字签名向您证明的是,Azure AD 对令牌进行了签名并且它没有被修改。然后您可以检查发行者以检查它是哪个租户。
  • 您可以将它们缓存一段时间。事实上,.NET 身份验证库会将它们缓存 8-12 小时,然后在后台自动刷新。键可以改变,并且在过去已经改变。在您的应用程序中对密钥进行硬编码是个坏主意。但是缓存策略很好。我认为即使是 24 小时缓存也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多