【发布时间】:2021-03-29 15:10:00
【问题描述】:
所以,我正在尝试使用 ASP.NET Core 3.1 实现 OIDC 客户端应用程序。我正在尝试利用 .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
};
}
我注意到,根据我在下面的 Fiddler 捕获,首次启动应用程序时会请求授权服务器的 /.well-known/oidc-configuration 和 /.well-known/keys 端点
它在哪里做的?
我也在尝试验证从授权服务器收到的 JWT 是否有效(在服务器发送它到客户端收到它的时间之间它没有被篡改)。当我在.AddJwtBearer() 中间件中添加TokenValidationParameters 对象时,我明白会发生这种情况。为了测试这一点,我尝试将TokenValidationParameters 中的Valid Audience 更改为asdkwewrj 之类的东西,我知道这不是我的令牌的有效受众。但是,我从来没有收到客户说观众无效的错误。身份验证仍然有效,我仍然能够访问我的安全仪表板。
我正在尝试实现的另一件事是使用此 OIDC 客户端的 refresh_token grant_type。我认为.AddOpenIdConnect() 中间件中的options.saveTokens 可以让我保存令牌。看起来它们保存为 cookie,但这些 cookie 看起来不像我的令牌值(我的访问令牌是 JWT,但在我看到的 cookie 中,它们都不是以 ey 开头)。
简而言之,我试图理解以下内容:
- 如果我定义了正确的
JwtBearerOptions(就像我上面所做的那样),这个.AddJwtBearer()中间件是否会为我验证ID 令牌?或者我是否需要根据 JWK URI 中的 JWK 手动验证 ID 令牌? - 如果我必须使用 JWKs URI 中的 JWK 手动验证 ID 令牌,当中间件向
/.well-known/keys端点发出请求时,如何存储这些 JWK? - 如何获取访问令牌和刷新令牌对应的cookie,然后将刷新令牌发送到我的授权服务器?
- 我注意到我可以在这两个中间件中使用 options.Events。这些中的任何一个都可以解决我想要完成的任何项目吗?
- 总体而言,这两个中间件为我处理了哪些我不需要手动执行的操作(即令牌验证和/或令牌更新)?
谢谢!对于像这样深入的 ASP.NET 开发,我还是很陌生,所以我很感激任何回应。
【问题讨论】:
标签: c# asp.net-core authentication oauth-2.0 openid-connect