您无需使用特定于 keycloak 的库即可将 Keycloak 与 ASP.NET Core 3.1 集成。您可以改用 JWT 令牌认证/授权库。
示例:
将以下行添加到您的 appsettings.json 文件中。请不要忘记将部分更改为您的领域名称。
"JWT": {
"Issuer": "https://<keycloakdomain>/auth/realms/<realmname>",
"Audience": "account, <realmname>, <anotherrealmname>"
}
您可以在您的 startup.cs 文件中键入以下代码。
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
x.Authority = Configuration["JWT:Issuer"];
x.IncludeErrorDetails = true;
x.SaveToken = true;
x.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context => { return Task.CompletedTask; },
OnTokenValidated = context => { return Task.CompletedTask; }
};
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = true,
ValidAudiences = (Configuration["JWT:Audience"]).Split(','),
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidIssuer = Configuration["JWT:Issuer"],
ValidateLifetime = false
};
x.Validate();
x.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = autFailed =>
{
autFailed.NoResult();
autFailed.Response.StatusCode = 401;
autFailed.Response.ContentType = "text/plain";
return autFailed.Response.WriteAsync(autFailed.Exception.ToString());
}
};
});
在这些操作之后,您可以通过发送 Bearer ... 作为 Authorization 标头值来查看令牌验证。