跳过IdentityServer3登录屏幕

Eug*_*kov 16 openid thinktecture-ident-server openid-connect thinktecture identityserver3

我们已将Client App配置为通过OpenID Connect协议使用IdentityServer3身份验证(它是使用OWIN中间件支持OIDC的ASP.NET MVC App).

IdentityServer3本身配置为使用本地登录和外部登录(例如Azure AD).

在常规流程中,一旦App需要对用户进行身份验证,它会将其重定向到IdentityServer3登录屏幕 - 这很好.但在某些情况下,基于每个请求,我想以某种方式绕过登录屏幕,让IdentityServer3知道用户想要立即登录特定的外部身份提供商.

这可能吗?

图片

Eug*_*kov 18

刚刚在IdentityServer3的授权/认证端点文档中找到了解决方案!

acr_values(可选)允许将其他身份验证相关信息传递给用户服务 - 还有一些具有特殊含义的值:idp:name_of_idp绕过login/home领域屏幕 并将用户直接转发到选定的身份提供者(如果每个客户端配置允许) )tenant:name_of_tenant可用于将租户名称传递给用户服务

如何使用OWIN OpenID Connect中间件传递其他参数:https://katanaproject.codeplex.com/workitem/325

以下是授权请求的示例:

样品申请


The*_*ock 7

我知道这已经过时了,但我想如果他们想要自动重定向到外部登录,我还是会把它放在这里帮助别人:

public override Task PreAuthenticateAsync(PreAuthenticationContext context)
{
    context.SignInMessage.IdP = "windows";
    return base.PreAuthenticateAsync(context);  
}
Run Code Online (Sandbox Code Playgroud)

您基本上可以覆盖UserServiceBase上的PreAuthenticateAsync,并将context.SignInMessage上的属性IdP更改为已在启动时设置的外部提供程序名称.这将重定向.