身份认证
验证和授权
内容目录
Micro (M3O 也一样) 具备可以微调身份验证和授权的功能. 本教程假设你已经登录了. 对 M3O 来说登陆过意味着你已经注册过, 对本地 micro server
来说意味着你已经用 id admin
和密码 micro
执行过 micro login
命令:
$ micro login
Enter email address: admin
Enter Password:
Successfully logged in.
规则
规则确定一个用户可以访问哪些资源. 默认规则如下:
$ micro auth list rules
ID Scope Access Resource Priority
default <public> GRANTED *:*:* 0
默认规则 default
可以调用 micro status
输出的所有服务. 举个栗子.
$ micro run helloworld
$ namespace=$(mico user namespace)
$ curl -H "Micro-Namespace: $namespace" https://api.m3o.com/helloworld
# Locally:
# curl 127.0.0.1:8080/helloworld/call?name=Alice
{"msg":"Hello Alice"}
如果我们想阻止其他人调用我们的服务, 可以添加如下规则:
# 此命令创建了一个规则, 仅允许登录后的用户可以调用 `micro server`
micro auth create rule --access=granted --scope='*' --resource="*:*:*" onlyloggedin
并且删除了默认的那项规则. 这里的作用域 *
与我们之前执行 micro auth list rules
看到的作用域 <public>
明显不同:
$ micro auth list rules
ID Scope Access Resource Priority
onlyloggedin * GRANTED *:*:* 0
default <public> GRANTED *:*:* 0
现在, 我们来删除默认规则.
# 此命令删除了 `default` 规则 - 该规则运行任何人调用 `micro server`.
$ micro auth delete rule default
Rule deleted
我们再来试试请求我们的服务:
$ micro run helloworld
$ namespace=$(mico user namespace)
$ curl -H "Micro-Namespace: $namespace" https://api.m3o.com/helloworld
# Locally:
# curl 127.0.0.1:8080/helloworld/call?name=Alice
{"Id":"helloworld","Code":401,"Detail":"Unauthorized call made to helloworld:Helloworld.Call","Status":"Unauthorized"}
非常好! 这意味着我们的 `onlyloggedin` 规则生效了. 我们可以携带令牌继续调用服务:
$ micro run helloworld $ token=$(micro user token) $ curl -H “Micro-Namespace: $namespace” “Authorization: Bearer $token” https://api.m3o.com/helloworld
# Locally:
# curl “Authorization: Bearer $token” 127.0.0.1:8080/helloworld/call?name=Alice
{“msg”:”Hello Alice”}
(请注意令牌的生命周期有限, 所以需要时不时使用命令 $ token=$(micro user token)
重新获取有效的令牌, 或者直接把此命令内联起来.)
这些都是验证非常基础的内容. 请不时回来查看更多内容更新!