【问题标题】:Blazor Web Assembly and Identity Server 4Blazor Web 程序集和身份服务器 4
【发布时间】:2021-01-14 10:09:52
【问题描述】:

我遵循this guide 为我的 Blazor Web Assembly 应用程序实施某种身份验证。我在某个服务器上运行了一个 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 为空,这反过来又在我的日志中产生以下内容:

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

有人能指出我在这里不理解的地方吗?我可以提供更多信息吗?

【问题讨论】:

    标签: identityserver4 openid-connect blazor-webassembly


    【解决方案1】:

    我不确定您的问题是否与 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,它是 by design on IDS4

    【讨论】:

    • 你是对的,有些东西没有正确设置,我一定是在遵循指南时错过了一些步骤。但我意识到,把整个事情扔掉并从头开始会更快......无论如何,现在可以了。谢谢
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 2019-06-26
    • 2020-11-17
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多