我有一个代理,它是openid客户端。在代理上,我配置了两个方案:
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。
我的客户根据请求选择方案:
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:
// 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可能会被多个提供商共享,确保这个提供商发布了身份”这句话吗?
感谢帮助,致以最良好的祝福:)
发布于 2018-07-09 12:50:55
我已经找到了答案。在这种情况下,您必须为每个提供程序提供不同的回调路径:https://github.com/aspnet/Security/issues/1510
https://stackoverflow.com/questions/51215502
复制相似问题