简单介绍
keystone提供了v3接口,包含了域(domain),项目的概念,域、项目都有角色的划分。
假设具有"admin"角色的用户是管理员,则本文提供了简单的用户管理员判断的方式
项目下申请token的方式
# 项目管理申请token方式
curl -X 'POST' -H "Content-type: application/json" http://localhost:35357/v3/auth/tokens -d '{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"domain":{
"name":"default"
},
"name": "admin",
"password": "admin-pwd"
}
}
},
"scope": {
"project": {
"domain":{
"name":"default"
},
"name": "admin"
}
}
}
} '
域申请token方式
# 域申请token方式
curl -X 'POST' -H "Content-type: application/json" http://localhost:35357/v3/auth/tokens -d '{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"domain":{
"name":"default"
},
"name": "admin",
"password": "admin-pwd"
}
}
},
"scope": {
"domain": {"name":"default"}
}
}
} '
token消息返回体
其返回body体带有角色信息, 包含一个role信息,示例如下:
{
"token": {
"is_domain": false,
"methods": ["password"],
"roles": [{
"id": "5be5497493fb4945bed88b251b45d229",
"name": "heat_stack_owner"
},
{
"id": "9fe2ff9ee4384b1894a90878d3e92bab",
"name": "_member_"
},
{
"id": "a80b25283631487e854d64780750655e",
"name": "admin"
}],
"expires_at": "2017-08-24T13:32:22.000000Z",
"project": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "9c5b936c873b498c8d7f912a4018fcbb",
"name": "admin"
},
"catalog": [],
"user": {
"password_expires_at": null,
"domain": {
"id": "default",
"name": "Default"
},
"id": "ee2b93d6cd7040049e4509fa0265494e",
"name": "admin"
},
"audit_ids": ["JxqNxl-8QeeVLP9jOXnlVg"],
"issued_at": "2017-08-24T05:32:22.000000Z"
}
}
角色判断依据
通过role可以判断该用户的角色
1、通过"项目管理申请token方式"获取到的role
如果是"admin",则是项目管理员
2、通过"域申请token方式"获取到的role
如果 域是"default",role 是"admin",则是 "系统管理员"
如果 域不是"default",role 是"admin",则是 "域管理员"
如果返回401错误,则该用户在该域下没有任何角色,没有任何操作权限