基于API密钥的集成
除了使用“SiX统一认证/授权”控制台 来管理租户中的身份验证/授权资产。如果您的业务模型要求您通过 Restful API管理此类资产,则可以使用“集成密钥”来执行此操作。
如果您正在开发自己的API,如 基于 IAM 开发自己的 API 中所述,并将向客户公开这些 API 的访问权限,则您也可以使用“集成密钥”来控制这些 API 的细粒度访问。
集成密钥具有与 IdP(身份应用程序)用户类似的授权模型,您可以将其放入不同的组中以为其设置不同的权限,也可以为其设置自定义属性。
交互流程
请参阅基于 IAM 开发自己的 API页面和架构部分。
访问平台 API 的基本步骤
使用以下步骤创建集成密钥以访问平台或您自己开发的 API。
警告
集成密钥需要先进行身份验证才能成功访问平台 API。
1. 创建集成密钥并授予授权
登录“SiX统一认证/授权”控制台,导航到“服务/集成密钥 -> 创建集成密钥”按照说明创建一个集成密钥。
提示
集成密钥需要先进行身份验证才能成功访问平台 API。
下载RSA256私钥并将密钥ID复制到本地PC以供后面的使用。
警告
RSA256 私钥只会在控制台上出现一次,并且不会保留在“SiX统一认证/授权”租户存储中。
切勿将此密钥暴露给无意使用,因为它充当集成密钥的凭据!
通过设置密钥的属性和或将其放入不同的授权组中来授予授权,根据您具体的设计。
2. 验证集成密钥并获取访问令牌
使用 RSA256 私钥和密钥 ID 生成 JWT
使用您下载的私钥和密钥ID创建JWT并对其进行签名。
创建 JWT 的示例代码片段:
public static String createJwtBearerTokenWithRsaPrivateKey(String pemEncodedRSAPrivateKey, String keyId, int expiringInSeconds) throws JOSEException {
//Convert the x509 RSA private key in PEM format to JWK
JWK jwk = JWK.parseFromPEMEncodedObjects(pemEncodedRSAPrivateKey);
RSAKey rsaJWK = jwk.toRSAKey();
long expiringTime = new Date().getTime() + expiringInSeconds * 1000;
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
.subject(keyId) //set the keyId as subject
.expirationTime(new Date(expiringTime))
.build();
SignedJWT signedJWT = new SignedJWT(
new JWSHeader.Builder(JWSAlgorithm.RS256).keyID(keyId).build(),
claimsSet);
//Create signer from the private key
JWSSigner signer = new RSASSASigner(rsaJWK);
signedJWT.sign(signer);
String jwt = signedJWT.serialize();
System.out.println(jwt);
return jwt;
}
使用 JWT 交换访问令牌
使用“/oauth2/token”端点将JWT交换为访问令牌,授权标头需要如下:
标头名称 | 标头值 |
---|---|
assertion | $JWT |
grant_type | urn:ietf:params:oauth:grant-type:jwt-bearer |
3. 使用访问令牌访问平台API。
将访问令牌放入“Authorization: Bearer ${access token}”请求标头中,然后访问下面列出的平台 API:
访问您自己的 API 的基本步骤
1. 创建集成密钥并授予授权
登录“SiX统一认证/授权”控制台,导航到“服务/集成密钥 -> 创建集成密钥”按照说明创建一个集成密钥。
提示
集成密钥需要先进行身份验证,才能成功访问平台API。
下载RSA256私钥并将密钥ID复制到本地PC以供后面使用。
警告
RSA256 私钥只会在控制台上出现一次,并且不会保留在“SiX统一认证/授权”租户存储中。
切勿将此密钥暴露给无意使用,因为它充当集成密钥的凭据!
通过设置密钥的属性和或将其放入不同的授权组中来授予授权,根据您具体的设计。
2. 验证集成密钥并获取访问令牌
使用RSA256私钥和密钥ID生成 JWT
使用您下载的私钥和密钥ID创建JWT并对其进行签名。
创建 JWT 的示例代码片段:
public static String createJwtBearerTokenWithRsaPrivateKey(String pemEncodedRSAPrivateKey, String keyId, int expiringInSeconds) throws JOSEException {
//Convert the x509 RSA private key in PEM format to JWK
JWK jwk = JWK.parseFromPEMEncodedObjects(pemEncodedRSAPrivateKey);
RSAKey rsaJWK = jwk.toRSAKey();
long expiringTime = new Date().getTime() + expiringInSeconds * 1000;
JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
.subject(keyId) //set the keyId as subject
.expirationTime(new Date(expiringTime))
.build();
SignedJWT signedJWT = new SignedJWT(
new JWSHeader.Builder(JWSAlgorithm.RS256).keyID(keyId).build(),
claimsSet);
//Create signer from the private key
JWSSigner signer = new RSASSASigner(rsaJWK);
signedJWT.sign(signer);
String jwt = signedJWT.serialize();
System.out.println(jwt);
return jwt;
}
使用JWT交换访问令牌
使用“/oauth2/token”端点将 JWT 交换为访问令牌,授权标头需要如下:
标头名称 | 标头值 |
---|---|
assertion | $JWT |
grant_type | urn:ietf:params:oauth:grant-type:jwt-bearer |
3. 使用访问令牌访问您自己的 API。
将访问令牌放入您的 API 请求中,例如放入标头中,然后调用您自己开发的 API。