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>