ASP.Net Identity Blazor: как получить доступ к ClientId и RedirectUris клиента из _Host.cshtml?

У меня есть внешнее приложение на основе https://github.com/nextauthjs/next-auth-example , которое успешно перенаправляется на мой сервер blazor Identity. Я хотел бы добиться следующего:

(1) ЕслиClaimsPrincipalимеет значение null, это означает, что пользователь не вошел в систему.RedirectToPage("/Account/Login", new {area = "Identity"});

(2) В противном случае перенаправьте обратно в клиентское приложение вызывающего абонента, настроенное с помощьюservice.AddInMemoryClients(clients). Например,

                  // interactive client using code flow + pkce
            new Client
            {
                ClientId = "myapp",
                ClientSecrets = { new Secret("whatever".Sha512()) },

                AllowedGrantTypes = new [] { GrantType.AuthorizationCode, GrantType.ResourceOwnerPassword },

                RedirectUris = { "https://www.myapp.io/api/auth/callback/myapp" },
                FrontChannelLogoutUri = "https://myauth.io/signout-oidc",
                PostLogoutRedirectUris = { "https://www.myapp.io" },
                //This feature refresh token
                AllowOfflineAccess = true,
                AllowedScopes = {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    "myapp"
                },
                //Access token life time is  3600 seconds (1 hour)
                AccessTokenLifetime = 3600,
                //Identity token life time is 3600 seconds (1 hour)
                IdentityTokenLifetime = 3600
            },

И HostModel:

      [AllowAnonymous]
public class HostModel : PageModel
{
    public async Task<IActionResult> OnGetAsync()
    {
        if (!await _userManager.GetUserAsync(User))
        {
            _logger.LogWarning($"{nameof(HostModel)}.{nameof(OnGetAsync)} Invalid User!");
            return RedirectToPage("/Account/Login", new { area = "Identity" });
        }
        /*
        else if (!_signInManager.IsSignedIn(User))
        {
            For some reasons, this always appears as false!
            _logger.LogWarning($"{nameof(HostModel)}.{nameof(OnGetAsync)} User not signed in!");
            return RedirectToPage("/Account/Login", new { area = "Identity" });
        }*/
        _logger.LogWarning($"{nameof(HostModel)}.{nameof(OnGetAsync)} User signed in!");
        return RedirectToPage("XXX: How to retrieve the RedirectUris and use it here?");
    }
}

Или как я могу настроить клиент, чтобы он попадал в/Identity/Account/Loginконечная точка напрямую?

      export default NextAuth({
  // https://next-auth.js.org/configuration/providers
  providers: [
    IdentityServer4Provider({
      id: "myapp",
      name: "myapp",
      authorization: {
        params: { scope: "myapp" },
      },
      issuer: config.get('https://myidentityserver.com'),
      clientId: config.get('IdentityServer4_CLIENT_ID'),
      clientSecret: sha512(config.get('IdentityServer4_CLIENT_SECRET')),
    }),
<snip>

0 ответов

Другие вопросы по тегам