账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Oauth2.0中授权码模式的客户端请求头部Authorization和Content-Type的设置问题
    36
    0

    看了阮一峰老师的教程后对照着自己写了个认证服务器,现在流程基本走通,但是在“客户端拿着授权码向服务器申请令牌”这一步有如下几个疑问:

    首先,教程给出的请求示例是:

    POST /token HTTP/1.1
    Host: server.example.com
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
    &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

    问题一:
    头部Authorization: Basic后面跟的是不是应该是加密的cliect_id+slient_secret呢?
    认证服务器接收到请求后解析Authorization,根据Basic之后的信息去验证客户端的合法性。

    问题二:
    头部Content-Type是否能够设置成applicaction/json呢,我搜了一下资料说是‘application/x-www-form-urlencoded’这种类型一般是用于form表单提交,我在这里没有用form表单是不是可以改成application/json呢?

    问题三:
    token生成后直接response.send()返回就可以吗,还是说保存到session或者别的什么地方返回给客户端比较好呢?

    (目前code和token的生成方法都是用的Crypto包随机生成的字符串并哈希,不知道有没有什么别的方式可以优化,比如生成的token里面带上相关的信息之类的)

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ╮適荖莮亾 普通会员 1楼

      在OAuth 2.0授权码模式(Authorization Code Flow)中,客户端与授权服务器之间主要有两个关键的HTTP请求步骤:

      1. 获取授权码(Authorization Request): 在这个步骤中,客户端重定向用户浏览器到授权服务器,请求用户的授权。这个请求通常不是通过设置HTTP头部Authorization和Content-Type来完成的,而是将认证信息以查询参数的形式附加在URL上。例如:

      GET /authorize? response_type=code& client_id=your_client_id& redirect_uri=https%3A%2F%2Fyour-client.com%2Fcallback& scope=read_user_info

      1. 用授权码换取访问令牌(Access Token Request): 在用户授权后,授权服务器会重定向回客户端提供的redirect_uri,并附带一个授权码。客户端使用此授权码向授权服务器发起POST请求以获取访问令牌,此时请求头可能包含Authorization字段(对于需要客户端身份验证的情况,如使用客户端ID和密钥Basic Auth)和Content-Type字段。

      例如:

      ```http POST /token Host: authorization-server.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded

      grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=https%3A%2F%2Fyour-client.com%2Fcallback ``` 上述请求中:

      • Authorization字段:采用Base64编码格式对客户端ID和秘密进行编码,格式为"Basic base64(client_id:client_secret)"。
      • Content-Type字段:设置为"application/x-www-form-urlencoded",表示请求体中的内容是键值对形式的数据。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部