在信任的应用中使用Oauth

在信任的应用(Trusted Applications)中使用Oauth

摘自《OAuth2.0 Identity and Access Management Patterns》

一般在内网中使用密码模式(password grant)和客户端凭证模式(client credentials)

资源拥有者密码凭证授权模式(Resource owner password credentials grant)

密码授权流程就是,客户端带上client_idclient_secret,发送用户的用户名和密码(username and password)去获取access_token,而不需要登陆到网页进行授权(就像授权码授权一样),只需要在客户端应用的UI中直接输入用户名和密码

密码授权的关键特性:

  • 在可依赖的客户端使用
  • 使用资源拥有者(resource owner)的用户名和密码
  • 不是基于重定向(redirection-based)的授权流程,客户端应用只需要向授权服务器发送一次请求,而且用户不需要在接口之间重定向去授权请求

这里写图片描述

密码授权流程:

  • 资源拥有者(resource owner,比如用户),提供用户名和密码缎带客户端
  • 客户端应用使用用户的凭证(用户名和密码),和client_idclient_secret向授权服务器发送请求
  • 授权服务器根据客户端提供的client_idclient_secret进行认证来决策是否授权同意,并且根据提供的用户名和密码向资源拥有者进行校验,如果者认证通过,授权服务器在响应中返回access_token
请求授权

根据参数构造请求地址:

// do POST
https://api.example-service.com/oauth/authorize?
        grant_type=password&
        client_id=CLIENT_ID_EXAMPLE&
        client_secret=CLIENT_SECRET&
        username=USERNAME&
        password=PASSWORD

请求参数:

  • grant_type: 强制参数,值是password
  • username: 强制参数,由资源拥有者提供(the user)
  • password: 强制参数,由资源拥有者提供(the user)
  • client_id: 可选参数,在客户端认证使用
  • client_secret: 可选参数,在客户端认证使用
  • scope: 可选参数,指明代表用户可以访问受保护资源的范围
授权成功

当授权服务器接收到来自客户端请求时,会校验几个地方:

  • 校验client_idclient_secret来确保客户端是否被授权
  • 校验资源拥有者(resource owner)的作证

响应参数:

  • access_token: 强制参数,实际上,客户端将保存这个值并以后使用
  • token_type: 强制参数,token的类型
  • expires_in: 可选参数,指明access_token的生命周期
  • refresh_token: 可选参数,在token将要过期的时候去获取新的token
授权错误

如果授权请求失败或者是其他原因,授权服务器将会返回包含错误信息的响应,一些错误的参数:

  • invalid_request: 当请求参数中缺少参数或者是值的时候
  • invalid_client: 当客户端认证失败,也可能发生在授权参数缺失(client_idclient_secret)或者是客户端尝试使用不支持的方法去认证
  • invalid_grant 指定的是无效的、过期的或撤销的,或者它被发送给另一个客户端
  • unauthorized_client: 授权服务器认证客户端,但没有授权
  • unsupported_grant_type: 授权服务器不支持的授权模式
  • invalid_scope: 指定的scope是无效的,未知的或者是畸形的

客户端凭证授权模式(Client credentials grant)

客户端凭证授权模式授权是不包含资源拥有者模块的,也就是说用户(the user)没有参与

在这个模式中,客户端请求access_token仅仅只是使用客户端凭证(client_idclient_secret),代表客户端本身去使用access_token,相反的,之前是代表授权用户去使用access_token

当服务提供者仅仅是提供一些API方法给客户端,而不是应用到资源拥有者使用的话,这是一个非常好的授权模式。

客户端凭证授权模式关键特性:

  • 在可依赖的客户端使用
  • 不是基于重定向(redirection_based)
  • 使用场景是,客户端直接和服务提供者交互而不是代表资源拥有者本身

这里写图片描述

客户端凭证授权模式授权步骤:

  • 客户端向授权服务器发送请求执行认证
  • 授权服务器基于客户端提供的client_idclient_secret认证并作出响应,如果授权成功,客户端将获取到access_token
请求授权(Requesting authorization)

根据参数构造请求地址:

// do POST method
https://api.example-service.com/oauth/authorize?
        grant_type=client_credentials&
        client_id=CLIENT_ID_EXAMPLE&
        client_secret=CLIENT_SECRET

构造请求的参数:

  • grant_type: 强制参数,值是credentials
  • scope: 可选参数,指定受保护资源具体哪一部分可以被访问
  • client_id: 对于客户端认证来讲是可选参数
  • client_secret: 对于客户端认证来讲是可选参数
授权成功

如果授权成功,授权服务器将会返回access_token,返回的格式如:

{
  "access_token":"exampleAccessTokenValue123",
  "token_type":"example",
  "expires_in":3600
}

注意,客户端凭证授权模式不会发行refresh_token

返回参数:

  • access_token: 强制参数,客户端将会存储这个access_token并在后期使用
  • token_type: 强制参数,代表token的类型
  • expires_in token的生命周期(秒)
授权错误

和密码授权模式返回的一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值