我试图了解我的Owin托管的Web Api是否需要验证用于签署JWT令牌的证书 .
我使用IdentityServer Build 了一个身份提供者 . 在"relying party"-侧,我有一个使用Owin托管的ASP.NET WebApi . 在RP端,我正在使用UseOpenIdConnectAuthentication在Owin管道中安装OpenIdConnectAuthenticationMiddleware .
到目前为止有什么工作:
-
访问我的Web应用程序的任何未经身份验证的用户都将重定向到IdentityServer上的登录页面
-
用户登录
-
用户被重定向回我的网络应用程序
-
我的网络应用程序收到包含id令牌和访问令牌的JWT
-
我的网络应用程序调用用户信息 endpoints 以使用访问令牌检索声明
我缺少的是验证用于签署包含身份令牌的JWT的证书的逻辑 .
使用Fiddler,我已经看到OpenIdConnectAuthenticationMiddleware从身份服务器检索密钥(通过调用https://myidentityserver.example.com/core/.well-known/jwks HTTP / 1.1)
OpenIdConnectAuthenticationMiddleware是否对证书执行某种验证?或者我应该自己编写这段代码?
2 回答
您描述的流程依赖于验证证书是从提供有效SSL服务器证书的TLS保护 endpoints (JWKs URL)中提取的事实 . 此SSL服务器证书可确保您与正确的OpenID Connect提供程序通信 .
找到了一些解释here
为了验证引用令牌,我们提供了一个称为访问令牌验证 endpoints 的简单 endpoints . 该 endpoints 例如是我们的访问令牌验证中间件使用它,它足够聪明,可以区分自包含(JWT)和引用令牌,并在本地或使用 endpoints 进行验证 . 所有这些对API完全透明 .
您只需指定Authority(IdentityServer的基本URL),中间件将使用它来提取配置(密钥,颁发者名称等)并构造到验证 endpoints 的URL