我遵循本指南为我的Blazor应用程序实现了某种身份验证。我在某个服务器上运行了一个Identity server 4实例,它似乎是完全可操作的。
我的问题是,在上面的指南中,传递给标识服务器的returnUrl显然不是本地url。通过深入研究Identity Server的代码,我发现如果返回url不是本地的,它总是无法登录用户:
public async Task<AuthorizationRequest> GetAuthorizationContextAsync(string returnUrl)
{
var result = await _returnUrlParser.ParseAsync(returnUrl);
if (result != null)
{
_logger.LogTrace("AuthorizationRequest being returned");
}
else
{
_logger.LogTrace("No AuthorizationRequest being returned");
}
return result;
}在DefaultIdentityServerInteractionService上面的代码中,ParseAsync()调用IsLocal(),这会导致result为null,这反过来会在我的日志中生成以下内容:
2020-09-28T19:37:25.932782009Z [2020-09-28T19:37:25.9324455+00:00] [VRB] [] [IdentityServer4.Services.OidcReturnUrlParser] returnUrl is not valid
2020-09-28T19:37:25.932807561Z [2020-09-28T19:37:25.9325314+00:00] [VRB] [] [IdentityServer4.Services.OidcReturnUrlParser] No AuthorizationRequest being returned
2020-09-28T19:37:25.932817324Z [2020-09-28T19:37:25.9325559+00:00] [VRB] [] [IdentityServer4.Services.DefaultIdentityServerInteractionService] No AuthorizationRequest being returned有人能指给我看我在这里不懂的地方吗?我能提供更多的信息吗?
发布于 2020-09-29 18:27:04
我不确定您的问题是否与LocalUrl有关,如果您遵循guid,您似乎设置了错误。
如果您遵循默认设置,那么在IDS4上进行客户端配置就足够了:
new Client
{
ClientId = "wasmappauth-client",
ClientName = "Blazor Webassembly App Client",
RequireClientSecret = false,
AllowedGrantTypes = GrantTypes.Code,
RequirePkce = true,
AllowedCorsOrigins = { "http://localhost:5005" },
RedirectUris = { "http://localhost:5005/authentication/login-callback" },
PostLogoutRedirectUris = { "http://localhost:5005/authentication/logout-callback" },
AllowedScopes = {"openid", "profile"},
}这是我的博客文章,我解释了同样的事情,但用更简单的措辞:https://nahidfa.com/posts/blazor-webassembly-authentication-and-authorization-with-identityserver4/
编辑:关于本地URL的检查,它是it 基于IDS4的设计
https://stackoverflow.com/questions/64108742
复制相似问题