bxb100 / bxb100.github.io

This is my blog
https://blog.tomcat.run
MIT License
1 stars 0 forks source link

OAuth 2.0 客户端认证的几种方式 #23

Open bxb100 opened 1 year ago

bxb100 commented 1 year ago

全文摘抄 https://darutk.medium.com/oauth-2-0-client-authentication-4b5f929305d4

OAuth 对资源所有者和用户来说是授权协议, 不是验证协议


client_secret_post

(OIDC Core, 9. Client Authentication)

传统的方式中, 授权服务器提前给与客户端一对 IDSecrect

image

然后再发送 POST 请求 token 的时候附加这对信息

image

client_secret_basic

(OIDC Core, 9. Client Authentication)

在获取 token 请求中包含 IDSecret 使用 Basic Authentication (RFC 7617)

首先使用冒号将二者拼接

{Client ID}:{Client Secret}

然后 Base64 后放入 Authorization 请求头中

image

client_secret_postclient_secret_basicRFC 6749, 2.3.1. Client Password 描述的两种客户端验证方案

client_secret_jwt

(OIDC Core, 9. Client Authentication)

在请求 token 的时候, 对数据使用 Secret 来生成签名 RFC 7515 (JSON Web Signature) 生成 JWT (RFC 7519) 传给授权服务器

image

JWT payload 格式定义在 RFC 7523, 2.2. Using JWTs for Client Authentication

image

这个 JWT 称为客户端断言 (OAuth In Action 也翻译为断言, 姑且称之)

请求 Token 时, 客户端断言 置于 client_assertion 请求参数上, client_assertion_type 是固定值: urn:ietf:params:oauth:client-assertion-type:jwt-bearer

image

private_key_jwt

(OIDC Core, 9. Client Authentication)

既然上面是用对称加密, 那么就一定会出现不对称加密 (公钥分享使用诸如 jwksjwks_uri client metadata)

image