我的问题Get redirect link from client in IdentityServer3 login page中描述的要求非常相似。 当用户(未登录)打开任何特定客户端应用程序页面(例如,从书签)或会话过期,并且用户刷新特定页面或执行某些操作时,他/她将被重定向到IdentityServer3的登录页面。
但我很困惑如何实现原始页面记住,并且用户被重定向回最初打开的应用程序页面而不是应用程序根目录(在idsrv3和OIDC中配置为静态重定向URL)中间件)。
有人可以指导我是否有可能以及如何做到这一点?
到目前为止我的假设:
我的客户端应用程序基于Angular 1.X,WebApi 2,OWIN并配置了三个中间件:UseCookieAuthentication,UserIdentityServerBearerTokenAuthentication和UseOpenIdConnectAuthentication,非常标准设置。应用程序是IdentityManager的一个分支,有一些修改。
答案 0 :(得分:2)
所以,我相信你有两个场景:
如果您想挑战:(用户在不需要身份验证的页面上,并单击登录按钮),您可以将当前页面传递给OIDC中间件,如下所示:
public void ActionResult Login(string redirecturi)
{
var props = new AuthenticationProperties { RedirectUri = redirecturi };
HttpContext.Current.GetOwinContext().Authorization.Challenge(props);
}
如果用户直接转到需要验证的网址,则 所需要的只是使用正常的[Authorize]
属性来装饰它。
看到一个人不能(或者不想)将auth下的每个页面添加到身份提供者的redirect_uri
的接受列表中,Microsoft会使用OIDC将其添加为sigininsession的元数据{ {1}}参数。你不可能直接看到它,因为它会在内部对你传递的所有东西进行urlencoded编辑(参见state
)。