当未经身份验证的用户在客户端网站上打开安全页面的URL时,他/她会重定向到IdentifyServer以进行登录,并在成功登录后返回到客户端的主页面(使用client / IdentityServer的默认实现时)。 /> 关于github RedirectUris with callback params does not work的问题解释说,记住QueryString是一个客户责任,并有建议:
如果您需要在重定向中保持状态,请发出一个 cookie客户端或通过官方状态参数传递数据。您 通常希望使用state参数作为本地指针 持久数据 - 例如一块饼干。创建一个随机名称的cookie - 存储需要存储的内容 - 往返cookie名称 作为状态参数。只是将数据置于状态就有问题了 有人可能会在回来的路上修改价值。
问题Identity server 3 MVC client state parameter有类似的建议:
在您的应用中存储有关登录后所需的重定向路径的状态。 在IdSvr将您的用户登录并重定向回您的用户之后 回调URI然后读取该状态以了解发送用户的位置。 IOW,跟踪您的应用中关于重定向的商店状态 登录后你想要的路径。如果你把它放在ProtocolMessage.State中 ,然后要知道有人可以篡改它。如果你保护 状态(签名/加密),然后就可以了。保持可能更容易/更安全 在您的应用中显示该状态。
由于这是一个非常典型的场景,我希望有人有这样一个实现的例子。 任何人都可以分享示例代码/参考某篇文章吗?
有关我的特定情况的更多信息:
我的客户是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
答案 0 :(得分:2)
我没有看过WebFormsClient。但是,如果您可以使用OpenIdConnectAuthentication
Owin中间件(在OwinClient示例中使用),则重定向应该自动发生。如果不支持OWIN中间件,您可以手动处理它。看看https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/MvcCodeFlowClientManual样本。在那里你可以控制state参数并自己处理重定向。
e.g:
在AccountController/SignIn()
中,您可以从查询字符串中获取redirectUri
,并将其添加到发送到身份服务器的authorization endpoint
的状态参数中。
然后在AccountController/SignInCallback()
中,您可以检索州参数并将用户重定向到他输入的网址。
使用OwinAuthentication中间件,这应该自动处理。