博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于DotNetOpenAuth的OAuth实现示例代码: 获取access token
阅读量:7042 次
发布时间:2019-06-28

本文共 2625 字,大约阅读时间需要 8 分钟。

1. 场景

根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token。

 

2. 实现环境

DotNetOpthAuth v5.0.0-alpha3, ASP.NET MVC 5, .NET Framework 4.5.1。

2. 主要实现示例代码

2.1. Authorization Server实现代码

2.1.1. ASP.NET MVC Controller实现代码

using System.Threading.Tasks;using System.Web.Mvc;using CNBlogs.Open.Domain.Entities.OpenAuth;using DotNetOpenAuth.OAuth2;using DotNetOpenAuth.Messaging;namespace CNBlogs.Open.Web.Controllers{    public class OAuthController : Controller    {        public async Task
Token() { var authServer = new AuthorizationServer(new AuthorizationServerHost()); var response = await authServer.HandleTokenRequestAsync(Request); return response.AsActionResult(); } }}

2.1.2. IAuthorizationServerHost接口实现

需要实现IsAuthorizationValid与CreateAccessToken这两个方法,实现代码如下:

public class AuthorizationServerHost : IAuthorizationServerHost{     public bool IsAuthorizationValid(IAuthorizationDescription authorization)    {        return authorization.ClientIdentifier == "webclientdemo"            && ClientIdentifier.;    }    public AccessTokenResult CreateAccessToken(IAccessTokenRequest accessTokenRequestMessage)    {        var accessToken = new AuthorizationServerAccessToken        {            Lifetime = TimeSpan.FromHours(10),            SymmetricKeyStore = this.CryptoKeyStore,        };        var result = new AccessTokenResult(accessToken);        return result;    }}

2.2 Client实现代码

namespace OAuthWebClient.Controllers{    public class OAuthController : Controller    {        private static readonly string CLIENT_ID = "webclientdemo";        public async Task
Redirect(string code) { var httpClient = new HttpClient(); var queryDict = new Dictionary
{ {
"grant_type", "authorization_code"}, {
"code", code}, {
"redirect_uri", Request.Url.Scheme + "://" + Request.Url.Host + Request.Url.AbsolutePath}, {
"client_id", CLIENT_ID}, {
"client_secret", "webclientdemosecret"} }; var httpContent = new FormUrlEncodedContent(queryDict); var response = await httpClient.PostAsync(Request.Url.Scheme + "://open.cnblogs.com/oauth/token", httpContent); return Content(await response.Content.ReadAsStringAsync()); } }}

考虑到跨平台访问的方便性,未使用DotNetOpenAuth.OAuth2.WebServerClient。 

3. 参考资料:

  • DotNetOpenAuth源代码:
  • OAuth 2.0规范:

转载于:https://www.cnblogs.com/dudu/p/dotnetopenauth_access_token.html

你可能感兴趣的文章
CentOS7安装和使用squid代理
查看>>
ADC电流采集
查看>>
logstash启动失败的问题追查
查看>>
基于容器制作镜像
查看>>
js刷新页面的方法
查看>>
Vue-入门
查看>>
delegate 和 block 的区别
查看>>
网格贴图合并
查看>>
如何读/写论文???
查看>>
Code Kata:大整数四则运算—乘法 javascript实现
查看>>
python学习-Pillow图像处理
查看>>
ThreadLocal
查看>>
学习myBatis - 如何配置myBatis
查看>>
LOJ #6053. 简单的函数
查看>>
[PA2014]Druzyny
查看>>
MapReduce - reduce function problem
查看>>
mysql 获取 汉字字段首字母(转)
查看>>
最佳加法表达式
查看>>
springboot profile 日志配置
查看>>
C++typedef的详细用法
查看>>