[关闭]
@darker 2015-12-11T08:39:10.000000Z 字数 1968 阅读 8325

详解UAA - 账户管理和统一认证

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版本以后可以使用。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注