@darker
2015-12-11T08:39:10.000000Z
字数 1968
阅读 8325
CloudFoundry
UAA
4A
1. 介绍
UAA是一个Web服务,用于管理账户、Oauth2客户端和用户用于鉴权的问题令牌(Issue Token)。UAA实现了Oauth 2授权框架和基于JWT(JSON web tokens)的问题令牌。
2. 用户、客户端和其他角色
用户(User): 通常表示一个实际存在的用户或者一个正在运行的进程。
客户端(Client): 表示代表一个用户或者他自身的一个应用。
资源服务器(Resource Server): 一般用来定义一个需要访问用户数据的应用程序。
3. 认证类型
客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。
4. 范围(Scope)
当你使用UAA时,你都将与范围(Scope)打交道。范围(Scope)本质上就是权限,并作为一个命名的参数附加到AccessToken上。
在Java的世界里,范围(Scope)经常指的就是角色。在UAA Token里,范围(Scope)有两种不同的命名:
scopes - 当Token表示的是一个用户的客户端
authorities - 当Token表示的是客户端(应用)自身
这就是UAA Token中权限的表示方法。当一个资源服务器收到一个包含一个Token的请求时,服务器可以基于Token中的范围(Scope)做一个判断。资源服务器必须先验证Token,在之前讨论过的Oauth2中有很多方法可以做到这点。
资源服务器通过读取token中的参数来区分不同的客户端, 如果是客户端(Client), 则读取'authorities'; 如果是用户(user), 则读取'scope'。
范围(Scope)的命名,比如password.write是一个任意的字符串。除了资源服务器用他们来授权,对其他组件没有任何意义。举个例子,当修改密码时,在请求中必须带有password.write的范围(Scope)的Token。
范围由客户端(Client)自己定义的任意字符串。UAA使用这个字符串并将他增加到audience字段中。
5. 客户端授权、UAA用户组和范围(Scope)
在UAA的每一个客户端都有一系列的client authorities。这些authorities表示了客户端自身的权限。客户端还有第二个字段: scopes, 这个字段是当这个客户端作为一个用户时的权限。
当认证类型是client_credentials时使用authorities来鉴权.
在UAA中,一个用户属于一个或者多个用户组。在UAA中的用户组就是Oauth世界中的范围(Scope)。可以嵌套的用户组更容易管理组员关系。
当一个表示用户的客户端发起一个请求时,一个Token通过以下步骤产生:
1. 客户端通过认证;
2. 用户通过认证;
3. 客户端的范围(Scope)确认存在;
4. 用户的范围(Scope)确认存在;
5. 来自于步骤3和步骤4的共享的范围集合列表被创建;
6. 一个Token被生成,包括来自步骤5的方位集合作为其中一个参数;
6. 通配符
范围(Scope)是一个任意的字符串,而这些字符串经常包括一些可命名的场景。比如,一个资源服务器维护文档需要创建一下一些范围:
document.<document id>.read
document.<document id>.write
document.<document id>.delete
一个分配了范围(scope=document..read document..delete)的客户端访问资源服务器,来读取、写入和删除他自己的文档。你也可以按如下格式分配:
document.asdsd-adasda-123212.write
document.asdsd-adasda-123212.read
document.wqere-adasda-adasda.read
document.wqere-adasda-adasda.delete
代表用户的权限的Token会包括:
document.asdsd-adasda-123212.read
document.wqere-adasda-adasda.read
document.wqere-adasda-adasda.delete
因此客户端没有写入权限。Token的audience字段会是doucment.
用户在范围名称中没有通配符。在用户中,*只表示一个普通的字符。范围名称是区分大小写的。
UAA 1.8.0版本以后可以使用。