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