首页 文章

IdentityServer客户端示例在重定向后记住QueryString参数

提问于
浏览
3

当未经身份验证的用户在客户端网站上打开安全页面的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 回答

  • 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中间件,这应该自动处理 .

相关问题