如何在基于令牌的身份验证中重定向到返回URL

时间:2016-02-25 15:53:45

标签: asp.net asp.net-mvc authentication asp.net-web-api oauth-2.0

描述

在我的移动应用程序中,用户尝试访问需要身份验证的资源。

登录并获取访问令牌后,我想将它们重定向到最初请求的页面(返回URL)。

问题

在基于令牌的身份验证中,如何重定向到返回网址?

示例

考虑这种情况:

1 - 我的移动应用程序“我的个人资料”中有一个菜单,可以打开 WebView 并导航到mycoolwebsite.com/myprofile

2 - 服务器(MVC控制器)使用returnUrl重定向到登录页面,如URL中所示。 mycoolwebsite.com/login?returnUrl='/myprofile'因为用户无法登录而无法访问mycoolwebsite.com/profile

3 - 用户看到登录页面,他们输入用户名和密码,然后按“登录”按钮。

4 - POST请求将发送到ASP.NET应用程序的_Token Endpoint _,包括用户名和密码以及grant_type的{​​{1}}

5 - 服务器验证凭据,并发出令牌。它会将令牌作为JSON对象发送回客户端。

问题:获取令牌后,我需要将用户重定向回原来请求的password

在ASP.NET MVC应用程序中,这会自动发生在MVC模板中。

但是在WebAPI中,我不确定这样做的正确方法是什么。

1 个答案:

答案 0 :(得分:2)

使用Cookie身份验证,其工作方式如下:

  1. 用户提交登录表单,向mycoolwebsite.com/login?returnUrl='/myprofile'
  2. 发出POST请求
  3. 服务器对用户进行身份验证,如果身份验证成功,则会使用位置 Set-Cookie 标头返回 302重定向响应。位置标头包含默认重定向网址(通常为“/”),或来自returnUrl参数的值(在本例中为“/ myprofile”)。
  4. 最后,浏览器设置身份验证Cookie,然后重定向到新位置。
  5. 承载令牌身份验证(最有可能是您的情况)

    1. 用户填写登录表单并向mycoolwebsite.com/token发送Ajax请求

    2. 如果身份验证成功,服务器将回复 200 OK 状态代码并返回accessToken。

    3. 然后,客户端读取响应正文并存储accessToken以供进一步使用。现在取决于你。您可以从URL读取returnUrl参数并将用户重定向到mycoolwebsite.com/myprofile

    4. 因此,这两者之间的区别在于重定向发生在服务器端(通过302重定向响应)或客户端。

      希望它有所帮助。