Blazor Web Assembly 和身份服务器 4
Blazor Web Assembly and Identity Server 4
我按照 this guide 为我的 Blazor Web Assembly 应用程序实施某种身份验证。我在某些服务器上有一个 Identity Server 4 实例 运行,它似乎完全可以运行。
我的问题是,在上面的指南中,传递给身份服务器的 returnUrl
显然不是本地 url。通过深入研究 Identity Server 的代码,我发现如果 return 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
有人可以指出我在这里不理解的地方吗?我可以提供更多信息吗?
不知道你的问题是不是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"},
}
这是我的博客 post,我用更简单的措辞解释了同样的事情:https://nahidfa.com/posts/blazor-webassembly-authentication-and-authorization-with-identityserver4/
编辑:关于检查本地 URL,它 by design on IDS4
我按照 this guide 为我的 Blazor Web Assembly 应用程序实施某种身份验证。我在某些服务器上有一个 Identity Server 4 实例 运行,它似乎完全可以运行。
我的问题是,在上面的指南中,传递给身份服务器的 returnUrl
显然不是本地 url。通过深入研究 Identity Server 的代码,我发现如果 return 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
有人可以指出我在这里不理解的地方吗?我可以提供更多信息吗?
不知道你的问题是不是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"},
}
这是我的博客 post,我用更简单的措辞解释了同样的事情:https://nahidfa.com/posts/blazor-webassembly-authentication-and-authorization-with-identityserver4/
编辑:关于检查本地 URL,它 by design on IDS4