OAuth的原理认证流程及访问资源流程

OAuth的原理认证流程及访问资源流程

图 1 授权流程

腾讯微博API通过以下四个步骤来完成认证授权并访问或修改受限资源的流程

  1. 1.获取未授权的Request Token(temporary credentials)
  2. 2.请求用户授权Request Token
  3. 3.使用授权后的Request Token换取Access Token(token credentials)
  4. 4.使用 Access Token 访问或修改受保护资源

其中1~3步使用https方式, 第4步使用http方式。


请求签名说明

所有TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。

图 1 授权流程

说明:

Signature Base String由以下三部分组成,各项之间使用&符号分隔。

1、Http Method
请求方法,GET/POST

2、URL Encode之后的请求URL(URL要小写)
例如:
请求URL:https://open.t.qq.com/cgi-bin/request_token
经URL Encode之后的请求URL为:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token

3、URL Encode并排序之后的请求参数
例如: URL请求参数为:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
经URL Encode并排序之后的请求参数格式如下(参数间使用%26(即&符号)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0

算法伪码:

httpMethod + "&" +
  url_encode(  base_uri ) + "&" +
  sorted_query_params.each  { | k, v |
      url_encode ( k ) + "%3D" +
      url_encode ( v )
  }.join("%26")

密钥由App Secret和Token Secret组成(中间使用&符号分隔)
签名算法目前只支持HMAC-SHA1。

获取未授权的Request Token

通过访问以下 URL 获取未授权的 Request Token

https://open.t.qq.com/cgi-bin/request_token

请求参数

参数意义
oauth_consumer_keyApp Key(应用信息中的App Key值)
oauth_signature_method签名方法,暂只支持HMAC-SHA1
oauth_signature签名值,密钥为:App Secret。计算说明。
oauth_timestamp时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数
oauth_nonce单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_callback认证成功后浏览器会被重定向到这个url中
oauth_version(可选)版本号,如果有必须为“1.0”

返回参数

参数意义
oauth_token未授权的Request Token
oauth_token_secret对应的Request Token Secret
oauth_callback_confirmed对oauth_callback的确认信号

说明:

① 用户授权后web应用将会重定向到oauth_callback。当应用为pc客户端或手机客户端应用时,没有回调url(oauth_callback)的概念,此时设置为字符串null即可。字符串“null”必须是小写

② 时间戳与标准时间偏差不得大于8分钟。

示例:

request_token

https://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0

参数名参数值
oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
oauth_signature_methodHMAC-SHA1
oauth_signatureexxzU/tTbpdicmYHcyYh5kqgYgo=
oauth_timestamp1299569145
oauth_nonceyQDMuXvdcEfQs2Mzf3XcT1r36WTULJls
oauth_callbacknull
oauth_version1.0

返回结果:

oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true

参数名参数值
oauth_tokenhdk48Djdsa
oauth_token_secretxyz4992k83j47x0b
oauth_callback_confirmedtrue

请求用户授权Request Token

此步骤的目的是请求用户授权Request Token,请求URL:

https://open.t.qq.com/cgi-bin/authorize

请求参数:

参数意义
oauth_token上一步中获得的未授权的Request Token

返回参数:

参数意义
oauth_token用户授权之后的Token值,与未授权Token值相同。
oauth_verifier验证码

说明:

①此页面中会要求用户登陆,然后选择同意或者拒绝对应用授权。

②授权成功后:

  • A: web应用会重定向到oauth_callback所指定的URL(含返回参数)。
  • B: 客户端应用(oauth_callback=null)会在网页中给出授权码,用户需要手工将验证码输入到应用中才能完成授权流程。

示例:

参数意义
oauth_tokenhdk48Djdsa
oauth_verifier473f82d3

oauth_token=hdk48Djdsa&oauth_verifier=473f82d3

使用授权后的Request Token换取Access Token

用户完成授权后,第三方应用可以通过访问如下url,将已授权的Request Token换取Access Token。Access Token将被用于访问或修改受限资源。

https://open.t.qq.com/cgi-bin/access_token

请求参数:

参数意义
oauth_consumer_keyAppKey
oauth_token第一步中获得的Request Token
oauth_signature_method签名方法,暂只支持HMAC-SHA1
oauth_signature签名值,密钥为:App Secret&Request Token Secret。计算说明。
oauth_timestamp时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数
oauth_nonce单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不同)
oauth_verifier上一步请求授权request token时返回的验证码
oauth_version(可选)版本号,有的话必须为“1.0”

返回参数:

参数意义
oauth_tokenAccess Token
oauth_token_secreateAccess Token Secret

说明:

  • ①本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)
  • ②获得返回值后就可以使用Access Token来访问资源了。
  • ③Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。
    • 用于签名的Signature Base String格式如下:

      示例:access_token:

      https://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0

      参数意义
      oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
      oauth_token6b99583b7bc8446bb57e86128158994f
      oauth_signature_methodHMAC-SHA1
      oauth_signature209vcEaHkmb/QwHqsRU3HRPvlqw=
      oauth_timestamp1299569210
      oauth_noncey2FrX7Muouma5vxWTKngEb7uHkRu4P5u
      oauth_verifier877973
      oauth_version(可选)1.0

      返回结果:

      oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00

      参数意义
      oauth_tokenoauth_token_secreate
      nnch734d00ls2jdkpdkkdhi9sl3r4s00

      至此,您的应用就取得了用户的授权,请妥善保管获得的Access Token和Access Token Secret。

      此后,您的应用就可以使用该Access Token访问腾讯微博了。

      使用Access Token访问腾讯微博

      获得Access Token之后,您的应用就可以使用该Access Token访问腾讯微博。

      在每次调用接口API时,请求都必须包含以下参数:

      参数意义
      oauth_consumer_keyAppKey
      oauth_tokenAccess Token
      oauth_signature_method签名方法,暂只支持HMAC-SHA1
      oauth_signature签名值,密钥为:App Secret&Access Token Secret。计算说明。
      oauth_timestamp时间戳
      oauth_nonce单次值

      示例:

      调用API:http://open.t.qq.com/api/t/add 发布一条微博:

      参数包括:
      1)接口参数:content和format;
      2)OAuth协议参数

      参数参数值
      content%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81
      formatjson
      oauth_consumer_keyaca77d2eb96f46e1b3353bc6743e8bfc
      oauth_nonceTld5QvrtTlRJvaSWPlCC7DIXxnTBeumD
      oauth_signatureJuPSe7ibf0uPECp4HcX4Fu9y3l0=
      oauth_signature_methodHMAC-SHA1
      oauth_timestamp1299569293
      oauth_tokenb8c8f1a888ea4f2887eac88787b6e895
      oauth_version1.0

      post:

      http://open.t.qq.com/api/t/add?content=%E6%9D%A5%E8%87%AA%23weibo_SDK%23%E7%9A%84%E6%B5%8B%E8%AF%95%E6%B6%88%E6%81%AF%EF%BC%81&format=json&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD&oauth_signature=JuPSe7ibf0uPECp4HcX4Fu9y3l0=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569293&oauth_token=b8c8f1a888ea4f2887eac88787b6e895&oauth_version=1.0

### 大语言模型参数规模与架构设计 大语言模型是一种基于深度学习技术构建的语言处理工具,其核心特点在于超大规模的参数数量以及强大的泛化能力。这些模型通常包含数十亿至数千亿个参数,这使得它们能够在多种自然语言处理任务中表现出卓越性能[^1]。 #### 参数规模 大语言模型参数规模是决定其性能的关键因素之一。随着研究的发展技术的进步,模型的参数量不断增长。早期的大规模模型可能仅包含数亿个参数,而现代最先进的模型已经达到了上千亿甚至万亿级别参数规模。这种庞大的参数量有助于捕捉更复杂的模式并提高生成文本的质量。 #### 架构设计 大语言模型的设计涉及多个方面,其中包括但不限于以下几个维度: - **模型架构** 当前主流的大语言模型主要采用Transformer架构作为基础框架。该架构以其高效的自注意力机制(self-attention mechanism)著称,在序列建模任务中表现优异。此外,一些变体如GPT系列BERT系列也进一步优化了原始Transformer结构以适应特定应用场景的需求[^2]。 - **预训练目标** 预训练阶段的目标函数对于最终模型效果至关重要。常见的方法包括掩码语言建模(Masked Language Modeling, MLM)、因果预测(Causal Prediction),以及其他创新性的无监督或弱监督学习策略。不同的预训练方式会影响下游任务的表现及适用范围。 - **适配与微调** 在实际应用过程中,通用型大语言模型往往需要针对具体场景进行调整或者微调操作。这一过程可以通过多任务联合训练(Multitask Fine-Tuning)等方式实现,从而让模型更好地服务于某一类专门用途的任务集合。 ```python import torch.nn as nn class TransformerModel(nn.Module): def __init__(self, vocab_size, d_model, nhead, num_encoder_layers, num_decoder_layers): super(TransformerModel, self).__init__() self.transformer = nn.Transformer(d_model=d_model, nhead=nhead, num_encoder_layers=num_encoder_layers, num_decoder_layers=num_decoder_layers) self.fc_out = nn.Linear(d_model, vocab_size) def forward(self, src, tgt): output = self.transformer(src, tgt) return self.fc_out(output) ``` 上述代码展示了一个简化版的Transformer模型定义,它体现了如何利用PyTorch库来搭建基本的神经网络层用于NLP任务中的序列转换问题解决思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值