.AddOpenIdConnect()
和 .AddJswtBearer()
中间件。然而,我需要一些澄清关于这个中间件在做什么方面的问题。以下是我当前的中间件配置:
.AddOpenIdConnect(options =>
{
options.Authority = Configuration["auth:oidc:authority"];
options.ClientId = Configuration["auth:oidc:clientid"];
options.ClientSecret = Configuration["auth:oidc:clientsecret"];
options.ResponseType = OpenIdConnectResponseType.Code;
options.GetClaimsFromUserInfoEndpoint = true;
options.SaveTokens = true;
})
.AddJwtBearer(options =>
{
options.Authority = Configuration["auth:oidc:authority"];
options.Audience = Configuration["auth:oidc:clientid"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = Configuration["auth:oidc:authority"],
ValidAudience = Configuration["auth:oidc:clientid"],
ValidateIssuerSigningKey = true,
ClockSkew = TimeSpan.Zero
};
}
我注意到应用程序在首次启动时会请求授权服务器的/.well-known/oidc-configuration
和/.well-known/keys
端点,如下所示的我的Fiddler捕获
它在哪里执行?
我也尝试验证从授权服务器接收到的JWT是否有效(即在服务器发送它和客户端接收它之间没有被篡改)。当我在.AddJwtBearer()
中添加TokenValidationParameters
对象时,我认为会发生这种情况。为了测试这个,我尝试更改TokenValidationParameters
中的Valid Audience
为像asdkwewrj
这样的内容,但我知道这不是我的令牌的有效受众。但是,我从未收到来自客户端的错误,说受众无效。认证仍然有效,我能够访问我的安全仪表板。
我还想实现refresh_token grant_type与此OIDC客户端。我认为.AddOpenIdConnect()
中的options.saveTokens
将允许我保存令牌。看起来它们被保存为cookie,但这些cookie看起来与我的令牌值完全不同(我的访问令牌是JWT,但在我看到的cookie中,没有一个以ey
开头)。
简而言之,我正在努力理解以下内容:
- 如果我已经定义了正确的JwtBearerOptions(如上所示),那么这个.AddJwtBearer()中间件是否会为我验证ID Token?还是说我需要手动根据JWKs URI验证ID token?
- 如果我必须手动使用来自JWKs URI的JWKs验证ID token,那么当中间件请求/.well-known/keys端点时,我应该如何存储这些JWKs?
- 如何获取与访问令牌和刷新令牌对应的cookie,然后将刷新令牌发送到我的授权服务器?
- 我注意到我可以在这两个中间件中都使用options.Events。其中任何一个可以解决我尝试完成的任何任务吗?
- 总体而言,这两个中间件为我处理了什么,我不应该手动进行(例如令牌验证和/或令牌更新)?
谢谢! 我对像这样深入地开发ASP.NET还比较新,所以我感谢任何回答。
.AddJwtBearer()
中间件吗?/.well-known/keys
端点时,中间件存储JWKs的位置?.AddOpenIdConnect()
中间件的TokenValidationParameters
中,有一个选项可以设置ValidateIssuerSigningKey
,还有一个选项可以设置IssuerSigningKey(s)
,但也有一个IssuerSigningKeyValidator
。如果没有设置任何这些内容,中间件仍然可以正确验证JWK吗? - deathcat05JwtBearerOptions.ConfigurationManager
用于从元数据终结点(.well-known/openid-configuration
和签名密钥)请求配置。但是您也可以通过设置JwtBearerOptions.Configuration
直接配置身份验证配置。 - pokeGetConfigurationAsync
方法以访问元数据端点中的配置。通常,不需要这样做,因为身份验证方案会为您完成这项工作。 - poke