使用 OpenId Connect 时验证签名证书

问题描述 投票:0回答:3

我试图了解我的 Owin 托管的 Web Api 是否需要验证用于签署 JWT 令牌的证书。

我已经使用 IdentityServer 设置了身份提供商。 在“依赖方”方面,我有一个使用 Owin 托管的 ASP.NET WebApi。在 RP 端,我使用 UseOpenIdConnectAuthentication 在 Owin 管道中安装 OpenIdConnectAuthenticationMiddleware。

到目前为止有什么作用:

  1. 任何未经身份验证的用户访问我的 Web 应用程序都会被重定向到 IdentityServer 上的登录页面
  2. 用户登录
  3. 用户被重定向回我的网络应用程序
  4. 我的网络应用程序收到包含 id 令牌和访问令牌的 JWT
  5. 我的 Web 应用程序调用用户信息端点以使用访问令牌检索声明

我缺少的是验证用于签署包含身份令牌的 JWT 的证书的逻辑。

使用 Fiddler,我已经能够看到 OpenIdConnectAuthenticationMiddleware 从身份服务器检索密钥(通过调用 https://myidentityserver.example.com/core/.well-known/jwks HTTP/1.1)

OpenIdConnectAuthenticationMiddleware 是否对证书执行某种验证?或者我应该自己编写这段代码?

certificate jwt openid-connect identityserver3
3个回答
1
投票

您描述的流程依赖于这样一个事实:验证证书是从提供有效 SSL 服务器证书的 TLS 保护端点(JWK URL)中提取的。此 SSL 服务器证书可保证您正在与正确的 OpenID Connect 提供商交谈。


0
投票

找到一些解释这里

为了验证引用令牌,我们提供了一个简单的端点,称为访问令牌验证端点。该端点例如由我们的访问令牌验证中间件使用,该中间件足够聪明,可以区分自包含(JWT)和引用令牌,并在本地或使用端点进行验证。所有这一切对 API 来说都是完全透明的。

您只需指定权限(IdentityServer 的基本 URL),中间件将使用它来提取配置(密钥、颁发者名称等)并构建验证端点的 URL


0
投票

是OpenIdConnectAuthenticationMiddleware

这取决于你的中间件。如果您的中间件正在检索签名密钥,它可能会验证证书。然而 url 并不总是相同,中间件读取配置(在某些情况下,至少对于 Microsoft 和 KeyCloak 而言,它位于

/.well-known/openid-configuration
),然后提取 JWK 的位置,然后读取密钥,所以可能你会得到两个连接。另一方面,您的中间件可以在一定时间内缓存这些密钥,这意味着它可能在一段时间内无法连接和读取密钥(最好和更快的情况)

无论哪种情况,您都需要确保至少验证 JWT 的签名和 JWT 的受众 (

aud
) 值,以确保令牌有效且适用于您的系统。除此之外,还有两个日期标头需要验证。

  • nbf
    之前无效
  • exp
    (到期日)后无效
© www.soinside.com 2019 - 2024. All rights reserved.