ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证 (4)

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  从上面代码可以看出这个提供器的核心功能是以Guid的方式生成一个键值(授权码)保存了当前用户的信息,当解析时通过该键值(即授权码)获取用户身份信息。(注:AuthenticationTokenCreateContext对象用于对当前用户身份信息AuthenticationTicket对的的序列化和反序列化)

  完成后将该提供器配置到授权服务器中间件中:

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

6. 为授权服务器添加用户授权提示页面

  当用户访问授权码终结点时理应让用户知道Client需要他的授权,为此在ASP.NET MVC程序中需要添加一个路由与授权码终结点地址匹配的Controller、Action以及View:

  1). Controller及Action(注:该Action需要通过身份验证,如果没有需要跳转到登录页面完成身份验证后才可访问):

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  2). View:显示授权提示

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

7. 运行程序

  1). 访问授权码终结点获取授权码::59273/oauth2/authorize?response_type=code&client_id=test1

  由于没有登录,所以先跳转到登录页面。

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  完成登录后跳转回授权页面:

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  点击授权按钮后,携带授权码跳转到test1这个client的重定向Url(注:此处test1这个Client设置的Url就是授权服务器本身,所以看上去没有做重定向)

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  得到授权码后,携带授权码访问Access Token终结点获取Access Token(注:这里使用Chrome浏览器的Postman拓展来实现请求的模拟):

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  注:上面响应信息中的access_token包含了加密后用户的身份信息,其加密过程可参考基于Cookie的用户信息加密过程。ASP.NET没有魔法——ASP.NET Identity的加密与解密

实现基于Access Token的身份验证

  上面介绍了如何基于授权码模式获得Access Token,接下来将介绍如何使用Access Token来访问受限制的资源(注:本例中的资源服务器与授权服务器位于同一实例中,所以当资源服务器对access token解密时,能够保证与授权服务器用于生成access token所用密钥一致,能够正常解密,这里的Access Token和基于Cookie的身份验证中的身份验证Cookie性质是相同的,都是将用户的身份信息序列化后的加密字符串)

  1. 在Startup类中添加基于Bearer的OAuth身份验证中间件:

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  2. 添加访问受限制的资源:

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  3. 访问受限资源:

  未添加授权信息直接跳转到登录页面。

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

  添加Access Token后可正常访问资源:

  

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

加入Refresh Token支持

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyxzw.html