首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同oidc方案上的认证

不同oidc方案上的认证
EN

Stack Overflow用户
提问于 2018-07-07 01:48:29
回答 1查看 69关注 0票数 0

我有一个代理,它是openid客户端。在代理上,我配置了两个方案:

代码语言:javascript
复制
            services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Bearer";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc-app1", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority = "http://sts.com";
                options.RequireHttpsMetadata = false;

                options.ClientId = "app1";
                options.SaveTokens = true;
            })
            .AddOpenIdConnect("oidc-app2", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority = "http://sts.com";
                options.RequireHttpsMetadata = false;

                options.ClientId = "app2";
                options.SaveTokens = true;
            });

这两种方案只在ClientIds上有所不同: app1和app2。

我的客户根据请求选择方案:

代码语言:javascript
复制
                string clientId = GetClientIdFromContext(context);
                string schema = $"oidc-{clientId}";

                var userResult = context.AuthenticateAsync(schema);
                var user = userResult.Result.Principal;

                // Not authenticated
                if (user == null || !user.Identities.Any(identity => identity.IsAuthenticated))
                {
                    return context.ChallengeAsync(schema);
                }
                else
                {
                    return next();
                }

App1方案鉴权成功。

当我在方案“app2”上进行身份验证时:-身份服务器发出令牌-当处理http://proxy/signin-oidc时,我收到错误"Not authenticated“

这个错误可能来自于该代码:

Microsoft.AspNetCore.Authentication\RemoteAuthenticationHandler.cs:

代码语言:javascript
复制
                // The SignInScheme may be shared with multiple providers, make sure this provider issued the identity.
            string authenticatedScheme;
            var ticket = result.Ticket;
            if (ticket != null && ticket.Principal != null && ticket.Properties != null
                && ticket.Properties.Items.TryGetValue(AuthSchemeKey, out authenticatedScheme)
                && string.Equals(Scheme.Name, authenticatedScheme, StringComparison.Ordinal))
            {
                return AuthenticateResult.Success(new AuthenticationTicket(ticket.Principal,
                    ticket.Properties, Scheme.Name));
            }

            return AuthenticateResult.Fail("Not authenticated");

但是我不能调试它。

你能帮帮我吗?你能解释一下“SignInScheme可能会被多个提供商共享,确保这个提供商发布了身份”这句话吗?

感谢帮助,致以最良好的祝福:)

EN

回答 1

Stack Overflow用户

发布于 2018-07-09 12:50:55

我已经找到了答案。在这种情况下,您必须为每个提供程序提供不同的回调路径:https://github.com/aspnet/Security/issues/1510

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51215502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档