Open API
概述
SERVICEME Open API 调用基本流程:
第一步,采用身份认证章节提供的接口进行身份认证,获取 access token
认证分为两类,一类是用户认证,另一类是客户端认证。
- 用户认证:基于个人账号身份进行认证的方式。
- 客户端认证:用SERVICEME颁发的客户端code与secret进行认证的方式。
第二步,携带access token调用对应的API
身份认证方式
用户AAD认证
该方式属于用户认证的一种,需要使用到AAD的access token作为身份认证的依据。
-
AAD access token 获取方式:
AAD 与 React 集成文档:前往->
AAD 与 .Net 集成文档:前往->
AAD 与 Java 集成文档:前往->
-
接口地址:
/openapi/auth/user/aad -
请求方式:
post -
请求body:
| 参数名称 | 必填 | 类型 | 参数解释 |
|---|---|---|---|
| token | 是 | string | 用户AAD access token(对接方自己提供) |
- 接口请求示例:
curl --location 'https://localhost/openapi/auth/user/aad' \
--header 'Content-Type: application/json' \
--data '{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlhSdmtvOFA3QTNVYVdTblU3Yk05blQwTWpoQSJ9.eyJhdWQiOiIzZTEwNjVhYS1jZWYxLTRiYTgtOWRiOS1kMWQ1Y2UzMGYyZDgiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDRjMjRmNDItZDQ5Yi00MT......"
}'
- 响应body:
| 参数名称 | 参数二级 | 类型 | 参数解释 |
|---|---|---|---|
| data | object | 响应数据 | |
| access_token | string | SERVICEME系统 access token | |
| expires_in | number | 过期时间,单位分钟 | |
| success | boolean | 是否成功 | |
| msg | string | 当success为false时,该处有值,会有部分错误提示 |
- 响应示例:
{
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc0V4dGVybmFsIjpmYWxzZSwidXNlcklkIjoiNDAzMDUwMjEwMTEyODgzOTE2OCIsImFjY291bnQiOiJlY210cmlhbEBzZXJ2aWNlbWUub25taWNyb3NvZ......",
"expires_in": 1440
},
"success": true,
"msg": ""
}
客户端与用户账户认证
这种认证方式采用客户端认证和用户账户认证相结合的方式。通过用户账户进行身份认证,同时需要使用客户端凭证(client id和secret)来确保接口调用的安全性。调用此接口时需要进行签名验证。
- 如何获取client和secret?
系统管理员通过客户端管理界面进行凭据创建{domain}#/super-admin/client-management,创建后即可获取client id和secret。
-
接口地址:
/openapi/auth/client_with_account -
请求方式:
post -
请求body:
| 参数名称 | 必填 | 类型 | 参数解释 |
|---|---|---|---|
| client | 是 | string | 客户端Id |
| account | 是 | string | 用户账户(对应用户管理中的UserName) |
| timestamp | 是 | number | 时间戳(13位数字,精度到毫秒,如 1711537596897 ) |
| nonce | 是 | string | 6位随机数(数字或字母的组合均可) |
| signature | 是 | string | 签名,五分钟内有效(签名格式:用冒号拼接后再MD5 client:{client}secret:{secret}account:{account}timestamp:{timestamp}nonce:{nonce} 得到的MD5 32位长度的值转小写) |
-
javascript 签名示例:
请新建一个 html 文件粘贴以下内容后使用浏览器打开
<html>
<head>
<style>
.box {
width: 100%;
height: 100%;
padding: 50px 50px;
}
.row {
display: flex;
height: 50px;
width: 100%;
}
.col1 {
flex: 1;
}
.col2 {
flex: 3;
}
</style>
</head>
<body>
<div class="box">
<div class="row">
<div class="col1">client:</div>
<div class="col2" id="client"></div>
</div>
<div class="row">
<div class="col1">secret:</div>
<div class="col2" id="secret"></div>
</div>
<div class="row">
<div class="col1">account:</div>
<div class="col2" id="account"></div>
</div>
<div class="row">
<div class="col1">timestamp:</div>
<div class="col2" id="timestamp"></div>
</div>
<div class="row">
<div class="col1">nonce:</div>
<div class="col2" id="nonce"></div>
</div>
<div class="row">
<div class="col1">signature:</div>
<div class="col2" id="signature"></div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<script>
const client = "openapi"
const secret = "DzYwyICrKbUCEseYthCK0PfSfX7NPEuV"
const account = "test@serviceme.com"
const timestamp = +new Date()
const nonce = "123abc"
const message = `client:${client}secret:${secret}account:${account}timestamp:${timestamp}nonce:${nonce}` // 签名明文
const md5Hash = CryptoJS.MD5(message).toString().toLowerCase(); // MD5 32位转小写
console.log(`签名明文:${message}`)
console.log(`签名结果:${md5Hash}`)
document.getElementById('client').innerText = client;
document.getElementById('secret').innerText = secret;
document.getElementById('account').innerText = account;
document.getElementById('timestamp').innerText = timestamp;
document.getElementById('nonce').innerText = nonce;
document.getElementById('signature').innerText = md5Hash;
</script>
</body>
</html> -
接口请求示例:
curl --location 'https://localhost/openapi/auth/client_with_account' \
--header 'Content-Type: application/json' \
--data '{
"client": "openapi",
"account": "test@serviceme.com",
"timestamp": 1711537596456,
"nonce": "123abc",
"signature": "182be0c5cdcd5072bb1864cdee4d3d6e"
}'
- 响应body
| 参数名称 | 参数二级 | 类型 | 参数解释 |
|---|---|---|---|
| data | object | 响应数据 | |
| access_token | string | SERVICEME系统 access token | |
| expires_in | number | 过期时间,单位分钟 | |
| success | boolean | 是否成功 | |
| msg | string | 当success为false时,该处有值,会有部分错误提示 |