导航:首页 > 源码编译 > oauthtoken生成算法

oauthtoken生成算法

发布时间:2023-05-15 06:31:07

㈠ OAuth2.0实现原理

OAuth2.0是一个授权框架,他信盯规定了客户从授权服务器获取令牌Token的规则。

要理解OAuth2.0,先要知道为什么会有这个东西产生,或者说他能帮我们解决什么问题,其实简单说他就是帮我们解决了访问安全问题。先看如下的一张图:

图片显示了我们没有引入任何安全机制情况下的资源访问过程,可以看到正常的用户和恶意的用户都可以通过向资源服务器的接口发送请求获得用户数据。显然恶意用户不该获取数据,他是非法获得,这个情况不应该被允许,需要一种机制保护用户数据。

OAuth2.0包含了资源拥有者,授权服务器,客户应用,授权服务器,资源服务器。
客户应用: 通常是一个 WebWeb 或者无线应用,它需要访问用户的。
资源服务器: 是一个 webweb 站点 或者 web service web service web service web service API ,用户的受保护。
授权服务器: 在客户应用成功认证并获得授权之后,向客户应用颁发访问令牌Access Token。
资源拥有者: 资源的拥有人,想要分享某些资源给第三方应用。

1)授权码(Authorization Code Token),仅用于授权码授权类型,用于交换获取访问令牌和刷新令牌
2)刷新令牌(Refresh Token),用于去授权服务器获取一个新的访问令牌
3)访问令牌(Access Token),这是OAuth令牌类型中最核心的一个,用于代表一个用户或服务直接去访问受保护的资源
4)Bearer Token,不管谁拿到Token都可以访岩坦运问资源,像现钞
5)Proof of Possession(PoP) Token,可以校验client是否对Token有明确的拥有权

上面提到了需要提供一种机制来保护数据,OAuth2.0提粗梁供的就是一种授权机制,就是说用户要访问资源必须先通过授权服务器授权拿到Access Token(访问授权),他拿着这个Access Token才能去资源服务器去要他想要的数据,示意图如下:

这里看到我们引入了一个授权服务器,这个授权服务器就是专门负责颁发Access Token的,客户应用需要从授权服务器中获得Access Token,获得后再向资源服务器去获取数据,请求中包含了Token一起发到资源服务器,资源服务器首先要验证这个Token是否合法,如果合法再返回数据给客户应用。
上图中红色圈圈圈起来的就是OAuth2.0框架协议工作的地方,他规定了客户应用如何获取Access Token,以及如何使用Token的整个过程。

其中核心的授权服务器包括了授权端点,令牌端点,校验端点,注销端点,如下图所示:

OAuth2.0中规定了多种授权模式,各种模式实现的复杂程度和安全系数不一样,我们先分别看一下四种授权模式:
1)授权码(Authrization Code)模式:
基本流程是先通过前端渠道客户获取授权码,然后通过后端渠道,客户使用Authrization Code去交换Access Token和可选的Refresh Token,这种模式是最安全的模式,因为令牌不会通过user-agent去传递,完整的过程如下图:

授权码模式的优点是比较安全,他可以有token过期时间,而且上面的第四和第五步都是在服务器之间的访问,很难被截获,用户信息也存在服务端,这样就保证了他的安全性。他的缺点是需要进行多次请求才能访问到资源。
授权码模式假定资源拥有者和客户不在一台设备上,他拥有高安全性的保障,目前市面上主流的第三方认证都是采用这种模式。

2)隐式/简化(Implicit)模式
基本流程是Access Token直接通过前端渠道从授权服务器返回,完整的过程如下图:

3)密码(Resource Owner Password)模式
基本流程是使用用户名/密码作为授权方式从授权服务器上获取Access Token,而且一般不支持refresh token,完整的过程如下图:

4)客户端(Client)模式
基本流程是通过后端渠道去获取一个Access Token,因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码和证书,完整的过程如下图:

客户端模式适合用作服务器间通信场景。

授权码模式有一个基本的选择流程,如下图:

㈡ 360oauth token是什么意思

就是先通过第三方系统才可以登陆。OAuth的解释就是对第三方应用的授权机制,使其获取用户的数据。数据所有者收到第三方请求授权后,桐袜高告局尺好迹诉系统通过第三方应用的请求,系统就会自动生成一个令牌(token),用来替代密码,供第三方应用使用。

允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth 2.0是OAuth 1.0的后一个版本,2012年10月,OAuth 2.0协议正式发布为RFC 6749。

系统工程:

实现系统最优化的科学。1957年前后正式定名,1960年左右形成体系。这是一门高度综合性的管理工程技术,涉及应用数学(如最优化方法、概率论、网络理论等)、基础理论(如信息论、控制论、可靠性理论等)、系统技术(如系统模拟、通信系统等)以及经济学、管理学、社会学、心理学等各种学科。

系统工程的主要任务是根据总体协调的需要 ,把自然科学和社会科学中的基础思想、理论、策略、方法等从横的方面联系起来,应用现代数学和电子计算机等工具 ,对系统的构成要素、组织结构、信息交换和自动控制等功能进行分析研究,借以达到最优化设计,最优控制和最优管理的目标。

㈢ 哪位大神能讲下OAuth2.0 token生成算法

1、HMACSHA1的概念
HMACSHA1 是
从 SHA1 哈希函数构造的一种键控哈希算法,被用作 HMAC(基于哈希的消息验证代码)。此 HMAC
进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。输出的哈希值长度为 160
位,可以转换为指定位数。
上面是微软的标准定义,我看了也没太明白,他的作用一句话来理解:就是确认请求的URL或者参数是否存在被篡改,以QQ
签名为例:发送方(自己)将参数等进行HMAC算法计算,将得到的哈希值(即签名值)与请求的参数一同提交至接收方(QQ端),然后接收方再次将参数等值
进行HMAC算法计算,将得到的哈希值与你传递过来的哈希值进行核对验证,若一样,说明请求正确、验证通过,进行一下步工作,若不一样,将返回错误。
(下面说的够详细了吧,还不理解,留言给我)

2、QQ OAuth 1.0中用到的哈希算法

/// <summary>

/// HMACSHA1算法加密并返回ToBase64String

/// </summary>

/// <param name="strText">签名参数字符串</param>

/// <param name="strKey">密钥参数</param>

/// <returns>返回一个签名值(即哈希值)</returns>

public static string ToBase64hmac(string strText, string strKey)

{

HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.UTF8.GetBytes(strKey));

byte[] byteText = myHMACSHA1.ComputeHash(Encoding.UTF8.GetBytes(strText));

return System.Convert.ToBase64String(byteText);

}
或者写成,原理一样:

public static string HMACSHA1Text(string EncryptText, string EncryptKey)
{
//HMACSHA1加密
string message;
string key;
message = EncryptText;
key = EncryptKey;

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] keyByte = encoding.GetBytes(key);
HMACSHA1 hmacsha1 = new HMACSHA1(keyByte);
byte[] messageBytes = encoding.GetBytes(message);
byte[] hashmessage = hmacsha1.ComputeHash(messageBytes);

return ByteToString(hashmessage);
}

前面都注释了参数含义,就不再说明了。COPY就可使用

注明:页面请引用
using System.Security.Cryptography;

3、介绍另外一种HMACSHA1算法的写法

public static string HMACSHA1Text(string EncryptText, string EncryptKey)

{
//HMACSHA1加密
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = System.Text.Encoding.UTF8.GetBytes(EncryptKey);

byte[] dataBuffer = System.Text.Encoding.UTF8.GetBytes(EncryptText);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
return Convert.ToBase64String(hashBytes);
}

㈣ okhttp3 oauth怎样获取token

腾讯用的是1.0变种的oauth协议, oauth的核心思想就在于用户授权的那一步, 没有用户的页面操作, 不可能完成oauth流程的。 没有授权, request_token就是未授权状态, 不会有verifier, 更不会产生access_token。

所以芦颤丛结论:没有人的参与, 不可能完成oauth流程。 只有一种条件下可洞胡以定时做, 那就是用户必须至少授权一次,你拥有用户的access_token并且token不过期。即陪樱使这样, 你还是要调用对方的授权页,只是对方受权页会视情况自动callback回来而已。

阅读全文

与oauthtoken生成算法相关的资料

热点内容
短信删除助手文件夹 浏览:686
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:277
沈阳用什么app租房车 浏览:857
00后高中生都用什么app 浏览:238
戴尔塔式服务器怎么打开独立显卡 浏览:807
医疗程序员招聘 浏览:598
住宿app可砍价是什么意思 浏览:133