如何在 Blazor WASM OIDC 身份验证中禁用 UserInfo 端点

问题描述 投票:0回答:1

我有一个面向 .NET 8 的 Blazor WebAssembly 应用程序。我正在使用 OIDC 身份验证,并已成功与 Keycloak 集成。我当前的配置如下所示:

// Program.cs
builder.Services.AddOidcAuthentication(options =>
{
    options.ProviderOptions.DefaultScopes.Clear();
    builder.Configuration.Bind("Oidc", options.ProviderOptions);
});

// appsettings.json
{
  "Oidc": {
    "Authority": ".../.well-known/openid-configuration",
    "ClientId": "client1",
    "PostLogoutRedirectUri": "http://localhost:8081",
    "DefaultScopes": [
      "openid"
    ],
    "ResponseType": "code"
  }
}

开发 Keycloak 服务器一切正常,但我在另一家公司的生产服务器上遇到了问题,其中 userinfo 端点出现故障。 /token 调用成功,并且我收到有效响应,但对 /userinfo 端点的后续调用失败。有没有办法在 OIDC 身份验证配置中禁用 userinfo 端点?

我没有成功地搜索选项来找到禁用 userinfo 调用的方法。我的第二次尝试是使用自定义 AuthenticationStateProvider,但我也无法完全完善该方法。

c# asp.net-core blazor openid-connect
1个回答
0
投票

您可以从 CustomAuthenticationStateProvider 中的 accesstoken 解析用户声明

public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
    private readonly IAccessTokenProvider _tokenProvider;

    public CustomAuthenticationStateProvider(IAccessTokenProvider tokenProvider)
    {
        _tokenProvider = tokenProvider;
    }

    public override async Task<AuthenticationState> GetAuthenticationStateAsync()
    {
        var tokenResult = await _tokenProvider.RequestAccessToken();
        if (tokenResult.TryGetToken(out var accessToken))
        {
            var handler = new JwtSecurityTokenHandler();
            var jwtToken = handler.ReadJwtToken(accessToken.Value);
            var identity = new ClaimsIdentity(jwtToken.Claims, "jwt");
            var user = new ClaimsPrincipal(identity);
            return new AuthenticationState(user);
        }
//return empty identity.
        return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.