-
Notifications
You must be signed in to change notification settings - Fork 11
IAM测试
stormpath的官方文档很慢,这个文档勉强参考吧。
通过租户注册界面,录入邮箱和密码,提交后系统会:
- 创建一个租户(tenant)
- 创建一个租户下的默认管理员目录(directory):iam_admin
- 在IAM-Admin目录下使用界面录入的邮箱和密码创建了一个用户(account)
- 通过登录界面输入租户id、用户id、密码登录系统
- 进入apikey管理界面,可查看、禁用、删除、新建apikey
- 新建一个apikey,包括apikey-id和apikey-secret,提示用户保存好apikey
- 系统保存apikey
下文使用变量$IAM_APIKEY_ID表示apikey id,变量$IAM_APIKEY_SECRET表示apikey secret。
export是linux设置环境变量的命令,curl是常用的http调试工具。
$ export IAM_APIKEY_ID=xxxx IAM_APIKEY_SECRET=xxxxx
$ curl -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
"https://dev.imaicloud.com/iam/api/v1/tenants/current"
输出是个json串,可以用jq工具输出格式化json(安装命令是apt-get install jq),即:
$ curl -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
"https://dev.imaicloud.com/iam/api/v1/tenants/current" | jq .
-u是--user的简写,表示http基础认证。 IAM的资源都是挂在租户下的,所以往往要先获取租户内码。通过上面的API可以得到租户内码,然后可以把租户内码设置为环境变量,以便后续的测试:
$ export TENANT_ID="XXX"
还有一种用curl -H参数表示http基础认证的方式,与-u参数执行结果是一样的,如:
$ curl -H "Authorization: Basic cGxNOHgyMDE2N0VxYW5pQkZvYUswUTpqN1VuMG9YOTQ3akdjNzZCRXRRa2NyZlduNHZCdTV1bWZRRUovc0NwZ0RB" "https://dev.imaicloud.com/iam/api/v1/tenants/current"
/v1/tenants/$TENANT_ID/directories
$ export IAM_APIKEY_ID=xxxx IAM_APIKEY_SECRET=xxxxx TENANT_ID=1gBTncWsp2ObQGgeXAMPLE
$ curl -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
"https://dev.imaicloud.com/iam/api/v1/tenants/$TENANT_ID/directories"
POST /v1/directoris
IAM租户注册时默认创建的是管理员目录,管理员目录名是约定的,不能改。
普通用户最好不用保存在管理员目录下,这就需要手工创建目录。
$ curl -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
-H 'Content-Type: application/json' -XPOST https://dev.imaicloud.com/iam/api/v1/directories \
-d '{ "description":"客户目录", "type":"cloud", "status":"enabled", "name":"customer" }'
GET /v1/directoris/$DIRECTORY_ID/accounts
$ export IAM_APIKEY_ID=xxxx IAM_APIKEY_SECRET=xxxxx
$ curl -i -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
"https://dev.imaicloud.com/iam/api/v1/directoris/$DIRECTORY/accounts"
POST v1/directories/$DIRECTORY_ID/accounts
必须通过URL指定创建用户所在的目录。iam_admin是管理员目录,其他的是自定义目录。创建在iam_admin下的用户自动成为管理员。
$ export IAM_APIKEY_ID=xxxx IAM_APIKEY_SECRET=xxxxx DIRECTORY_ID=customer
$ curl -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
-H 'Content-Type: application/json' -XPOST https://dev.imaicloud.com/iam/api/v1/directories/$DIRECTORY_ID/accounts \
-d '{ "email":"[email protected]", "password":"123", "status":"enabled", "username":"wbwang" }'
POST /v1/tenants/$TENANT_ID/loginAttempts
POST /v1/directories/$DIRECTORY_ID/loginAttempts
上述两个API的差异在于,前者会遍历租户下的所有目录,直到用户名口令匹配,而后者只检查指定目录下是否有符合的用户名口令。
GET /v1/directories/$DIRECTORY_ID/groups
POST /v1/directories/$DIRECTORY_ID/groups
GET /v1/$RESOURCE_TYPE/$RESOURCE_ID/customData
POST /v1/$RESOURCE_TYPE/$RESOURCE_ID/customData
$RESOURCE_TYPE可能是租户tenants、目录directories、组groups、账号accounts。 例如,获取某账号的定制数据:
GET /v1/accounts/$RESOURCE_ID/customData
$ export IAM_APIKEY_ID=xxxx IAM_APIKEY_SECRET=xxxxx RESOURCE_ID=xxxx(账号内码)
$ curl -i -u $IAM_APIKEY_ID:$IAM_APIKEY_SECRET \
"https://dev.imaicloud.com/iam/api/v1/accounts/$RESOURCE_ID/customData"