首先,需要在Blazor应用程序中安装Microsoft.AspNetCore.Authentication.OpenIdConnect包。可以在NuGet包管理器中搜索并安装。
然后,需要将Keycloak配置为OpenID Connect提供程序,并设置客户端,以便应用程序可以与Keycloak进行交互。可以参考以下配置选项。请将configObject和clientID替换为实际值。
{
"Authorization": {
"Authority": "https://keycloak.example.com/auth/realms/realm-name",
"ClientId": "clientID",
"ResponseType": "code",
"Scope": [ "openid", "profile" ],
"GetClaimsFromUserInfoEndpoint": true,
"SaveTokens": true
}
}
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
// ...
})
.AddCookie(options =>
{
// ...
})
.AddOpenIdConnect(options =>
{
options.Authority = configObject.Authorization.Authority;
options.ClientId = configObject.Authorization.ClientId;
options.ResponseType = configObject.Authorization.ResponseType;
options.Scope.Clear();
foreach (var item in configObject.Authorization.Scope)
{
options.Scope.Add(item);
}
options.GetClaimsFromUserInfoEndpoint = configObject.Authorization.GetClaimsFromUserInfoEndpoint;
options.SaveTokens = configObject.Authorization.SaveTokens;
options.TokenValidationParameters.NameClaimType = "name";
options.TokenValidationParameters.RoleClaimType = "role";
options.MapInboundClaims = false;
});
@inject HttpClient httpClient
@inject IAccessTokenProvider accessTokenProvider
@code {
private async Task CallProtectedApi()
{
var accessToken = await accessTokenProvider.RequestAccessToken();
httpClient.DefaultRequestHeaders.Authorization = new