开发者

接入 Cmine ID

标准 OpenID Connect:授权码 + PKCE。下面每个地址都是完整可用的,直接复制即可。

我的应用
第 1 步

注册应用,拿到 client_id

注册应用

填写应用名与回调地址(redirect_uri)。回调地址必须是 HTTPS 且完全匹配——登录成功后我们只会跳回这里。localhost 可以用 HTTP,方便本地开发。

新注册的应用处于待审核状态,管理员通过后才能发起登录。这是防滥用的基线策略,不是可选项。

第 2 步

把用户送到授权页

先生成 code_verifier(随机串),再取它的 SHA-256 作为 code_challenge。PKCE 对所有客户端都是强制的,公开客户端与机密客户端都不例外。

https://identity.chwjh.com/oauth/authorize
  ?response_type=code
  &client_id=YOUR_CLIENT_ID
  &redirect_uri=https://yourapp.com/callback
  &scope=openid profile email
  &state=RANDOM
  &code_challenge=BASE64URL(SHA256(verifier))
  &code_challenge_method=S256

用户登录后浏览器会带着 ?code=...&state=... 回到你的 redirect_uri。务必先核对 state 与你发出的一致。

第 3 步

用 code 换令牌

curl -X POST https://identity.chwjh.com/oauth/token   -H 'content-type: application/x-www-form-urlencoded'   -d grant_type=authorization_code   -d code=THE_CODE   -d redirect_uri=https://yourapp.com/callback   -d client_id=YOUR_CLIENT_ID   -d code_verifier=THE_VERIFIER

返回 access_token(JWT,1 小时)、id_token,以及——仅当你申请了 offline_access——refresh_token。机密客户端改用 HTTP Basic 传 client_id:client_secret。

第 4 步

校验令牌

在你自己的服务端用 JWKS 本地验签,不要每次都来问我们——除了 5 分钟缓存的 JWKS,全程不需要网络往返。

// 1. 取公钥(可缓存 5 分钟)
GET https://identity.chwjh.com/.well-known/jwks.json

// 2. 按 JWT header 里的 kid 找到对应公钥验签
// 3. 核对 iss / aud / exp
iss = https://identity.chwjh.com
aud = YOUR_CLIENT_ID

签名算法是 EdDSA(主)与 RS256(兼容),密钥会轮换,所以务必按 kid 查找,不要写死。

端点一览

全部地址

交互式 API 文档
用途地址
发现文档https://identity.chwjh.com/.well-known/openid-configuration
JWKShttps://identity.chwjh.com/.well-known/jwks.json
授权GET https://identity.chwjh.com/oauth/authorize
换取令牌POST https://identity.chwjh.com/oauth/token
用户信息GET https://identity.chwjh.com/oauth/userinfo
令牌内省POST https://identity.chwjh.com/oauth/introspect
吊销令牌POST https://identity.chwjh.com/oauth/revoke
OpenAPIhttps://identity.chwjh.com/openapi/identity-api.yaml
scope

你可以申请什么

openid确认用户身份,返回 id_token。几乎总是需要。
profile名字与头像。
email邮箱地址与是否已验证。
offline_access换取 refresh_token;不申请就没有。
entitlements:read读取用户在各 Cmine 产品的订阅状态。