当未经身份验证的用户在客户端网站上打开安全页面的URL时,他/她将重定向到IdentifyServer以进行登录,并在成功登录后返回到客户端的主页面(使用client / IdentityServer的默认实现时) .
关于github的问题RedirectUris with callback params does not work解释说,记住QueryString是一个客户的责任,并建议:
如果需要在重定向中维护状态,则发出cookie客户端或通过官方状态参数传递数据 . 您通常希望使用state参数作为指向本地持久数据的指针 - 例如一块 Cookies . 创建一个随机名称的cookie - 存储需要存储的任何内容 - 将cookie名称作为状态参数往返 . 只是将数据置于状态会产生一个问题,即有人可能会在返回途中修改值 .
问题Identity server 3 MVC client state parameter有类似的建议:
在您的应用中存储有关登录后所需的重定向路径的状态 . 在IdSvr将用户登录并重定向回您的一个众所周知的回调URI之后,您将读取该状态以了解将用户发送到何处 . IOW,在应用程序中跟踪存储状态中有关登录后所需的重定向路径的信息 . 如果你把它放在ProtocolMessage.State中,那么请注意有人可以篡改它 . 如果你保护状态(签名/加密),那就没关系 . 在您的应用中保持该状态可能更容易/更安全 .
由于这是一个非常典型的场景,我希望有人有这样一个实现的例子 . Can anyone share the sample code/give a reference to some article?
有关我的特定场景的更多信息:
我的客户端是Web表单站点,其实现类似于IdentityServer3.Samples WebFormsClient .
1.用户打开 https://mydomain/mypage?querystringparams
2.在Web.config我有
<authorization>
<deny users="?" />
</authorization>
3.在客户端Startup.cs中的相关设置
new OpenIdConnectAuthenticationOptions
{
Authority = "http://localhost:5000/",//IdentityServer4 Host
RedirectUri ="https://mydomain/"
}
4.在IdentityServer上进行相关设置
new Client
{
RedirectUris = { "https://mydomain/" , "http://mydomain/" }
}
- 登录后用户重定向到
https://mydomain/
,但需要重定向到https://mydomain/mypage?querystringparams
1 回答
我没有看过WebFormsClient . 但是如果你可以使用
OpenIdConnectAuthentication
Owin中间件(在OwinClient示例中使用),重定向应该会自动发生 . 如果不支持OWIN中间件,您可以手动处理它 . 看看https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/MvcCodeFlowClientManual样本 . 在那里,您可以控制state参数并自己处理重定向 .例如:在
AccountController/SignIn()
中,您可以从查询字符串中获取redirectUri
,并将其添加到发送到身份服务器的authorization endpoint
的状态参数中 .然后在
AccountController/SignInCallback()
中,您可以检索state参数并将用户重定向到他输入的URL .使用OwinAuthentication中间件,这应该自动处理 .