uaa 授权
快速获得强大的OAuth2服务器在本地计算机上运行的方法是使用出色的Cloud Foundry UAA项目。 UAA用作Cloud Foundry部署中的基础OAUth2授权服务器,可以大规模扩展,但仍然很小,可以在适度的硬件上启动。
我将在两篇文章中介绍如何使用UAA。 在本文中,我将介绍如何运行本地UAA服务器,并使用OAuth2 Authorization_code流中涉及的一些参与者(客户端和用户)来填充它,在后续文章中,我将展示如何使用此Authorization服务器。使用示例客户端应用程序并确保资源安全。
启动UAA
UAA项目的存储库位于https://github.com/cloudfoundry/uaa
下载项目很简单,只需克隆此仓库即可:
git clone https://github.com/cloudfoundry/uaa
如果您有本地JDK,请使用以下命令启动它:
./gradlew run
此版本的UAA使用内存数据库,因此,在重新启动应用程序时,生成的测试数据将丢失。
填充一些数据
与UAA交互的一种很棒的方式是其随附的名为uaac的CLI应用程序,可从此处获得 。 假设您已经下载了uaac cli,并且UAA在其默认端口8080上启动,那么让我们首先将uaac指向uaa应用程序:
uaac target http://localhost:8080/uaa
并使用罐装客户端凭据之一(admin / adminsecret)登录:
uaac token client get admin -s adminsecret
现在,客户端已登录,可以使用以下方式浏览令牌:
uaac context
这将显示UAA发行的令牌的详细信息,如下所示:
[3]*[http://localhost:8080/uaa]
[2]*[admin]
client_id: admin
access_token: eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJkOTliMjg1MC1iZDQ1LTRlOTctODIyZS03NGE2MmUwN2Y0YzUiLCJzdWIiOiJhZG1pbiIsImF1dGhvcml0aWVzIjpbImNsaWVudHMucmVhZCIsImNsaWVudHMuc2VjcmV0IiwiY2xpZW50cy53cml0ZSIsInVhYS5hZG1pbiIsImNsaWVudHMuYWRtaW4iLCJzY2ltLndyaXRlIiwic2NpbS5yZWFkIl0sInNjb3BlIjpbImNsaWVudHMucmVhZCIsImNsaWVudHMuc2VjcmV0IiwiY2xpZW50cy53cml0ZSIsInVhYS5hZG1pbiIsImNsaWVudHMuYWRtaW4iLCJzY2ltLndyaXRlIiwic2NpbS5yZWFkIl0sImNsaWVudF9pZCI6ImFkbWluIiwiY2lkIjoiYWRtaW4iLCJhenAiOiJhZG1pbiIsImdyYW50X3R5cGUiOiJjbGllbnRfY3JlZGVudGlhbHMiLCJyZXZfc2lnIjoiZTc4YjAyMTMiLCJpYXQiOjE0ODcwMzk3NzYsImV4cCI6MTQ4NzA4Mjk3NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsInppZCI6InVhYSIsImF1ZCI6WyJhZG1pbiIsImNsaWVudHMiLCJ1YWEiLCJzY2ltIl19.B-RmeIvYttxJOMr_CX1Jsinsr6G_e8dVU-Fv-3Qq1ow
token_type: bearer
expires_in: 43199
scope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read
jti: d99b2850-bd45-4e97-822e-74a62e07f4c5
要查看更易读和解码的令牌形式,只需运行:
uaac token decode
应该显示令牌的解码形式:
jti: d99b2850-bd45-4e97-822e-74a62e07f4c5
sub: admin
authorities: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read
scope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.read
client_id: admin
cid: admin
azp: admin
grant_type: client_credentials
rev_sig: e78b0213
iat: 1487039776
exp: 1487082976
iss: http://localhost:8080/uaa/oauth/token
zid: uaa
aud: admin clients uaa scim
现在,创建一个全新的客户端(称为client1),我将在后续文章中使用它:
uaac client add client1 \
--name client1 --scope resource.read,resource.write \
--autoapprove ".*" \
-s client1 \
--authorized_grant_types authorization_code,refresh_token,client_credentials \
--authorities uaa.resource
该客户端将向用户请求一个resource.read,resource.write范围,并将参与authorization_code授予类型的OAuth2流
创建系统的资源所有者或用户:
uaac user add user1 -p user1 --emails user1@user1.com
并为此用户分配一个resource.read范围:
uaac group add resource.read
uaac member add resource.read user1
进行测试流程
现在我们有了一个客户端和一个资源所有者,让我们快速执行一个authorization_code流程,uaac提供了一个方便的命令行选项,该选项提供了必要的重定向挂钩来捕获auth代码并将auth_code转换为访问令牌。
uaac token authcode get -c client1 -s client1 --no-cf
调用上述命令应该会打开一个浏览器窗口,并提示用户输入凭据:
使用先前创建的user1 / user1用户登录时,应在命令行中以一条消息指示已成功获取令牌的方式进行响应,可以使用以下命令再次探索该令牌:
uaac context
输出,显示登录用户的详细信息!:
jti: c8ddfdfc-9317-4f16-b3a9-808efa76684b
nonce: 43c8d9f7d6264fb347ede40c1b7b44ae
sub: 7fdd9a7e-5b92-42e7-ae75-839e21b932e1
scope: resource.read
client_id: client1
cid: client1
azp: client1
grant_type: authorization_code
user_id: 7fdd9a7e-5b92-42e7-ae75-839e21b932e1
origin: uaa
user_name: user1
email: user1@user1.com
auth_time: 1487040497
rev_sig: c107f5c0
iat: 1487040497
exp: 1487083697
iss: http://localhost:8080/uaa/oauth/token
zid: uaa
aud: resource client1
这结束了设置本地UAA并添加OAuth2流中涉及的几个角色(客户端和用户)的旋风之旅。 我还没有介绍OAuth2流程本身,OAuth2的Digital Ocean简介是关于流程的很好的入门。
我将在这篇文章之后发表一篇有关如何使用此基础架构来保护示例资源的文章,并演示使用Spring Security和Spring Boot的流程。
翻译自: https://www.javacodegeeks.com/2017/02/bootstrapping-oauth2-authorization-server-using-uaa.html
uaa 授权