https://www.jhipster.tech/using-uaa/
https://www.baeldung.com/jhipster-uaa-secured-micro-service
JHipster UAA介绍
前面我们介绍的JHipster Registry解决了服务注册与发现以及配置中心的问题。而这个UAA则是为了解决授权问题。
它主要上做了2件事
- 它提供了用户管理的服务,实际上uaa默认生成一个user表,并提供了user的增删查改服务。当然,如果对它对用户管理不满意,就可以在uaa项目的基础上做开发
- 它提供了token生成和token校验的功能
UAA部署
- 新建一个
uaa
文件夹 - 进入
uaa
文件夹,执行jhipster
命令 - 通过问答选择生成
uaa
项目,这里不细说,问答很简单基本一看就会 - 运行
./mvnw
为验证uaa是否启动成功,可以执行以下命令:
$ curl -X POST --data \
"username=user&password=user&grant_type=password&scope=openid" \
http://web_app:changeit@localhost:9999/oauth/token
上面的命令,向uaa
发送了几个参数,主要是username
和password
,去获取token
不出意外,uaa
会返回如下数据,这就代表uaa
启动成功了
{
"access_token" : "eyJh...(token omitted)",
"token_type" : "bearer",
"refresh_token" : "eyJ...(token omitted)",
"expires_in" : 299,
"scope" : "openid",
"iat" : 1539650162,
"jti" : "8066ab12-6e5e-4330-82d5-f51df16cd70f"
}
注意:
- 返回里最重要的是
access_token
和refresh_token
- 通过返回我们知道,这个
token
的过期时间只有5分钟(300秒),可以设置uaa的配置文件里的uaa.web-client-configuration.access-token-validity-in-seconds
值来改变token
过期时间
UAA的使用
现在我们拿到了access_token,使用它来发送一个简单调用
$ curl -H "Authorization: Bearer eyJh...(access token omitted)" \
http://localhost:9999/api/account
这个请求,是向uaa发送一个请求,查看账户信息
重点关注Authorization: Bearer eyJh...(access token omitted)
,这是向请求头里加入了一个键值对
- key
:Authorization
- value
:Bearer token(这个token就是上面/oauth/token请求返回给我们的access_token)
正常情况下,uaa会返回当前token所属用户的信息:
{
"id" : 4,
"login" : "user",
"firstName" : "User",
"lastName" : "User",
"email" : "user@localhost",
"imageUrl" : "",
"activated" : true,
"langKey" : "en",
"createdBy" : "system",
"createdDate" : "2018-10-14T17:07:01.336Z",
"lastModifiedBy" : "system",
"lastModifiedDate" : null,
"authorities" : [ "ROLE_USER" ]
}
通过以上调用,我们可初步了解uaa的工作原理:
- 任何请求都需要在请求头中加入
access_token
以供uaa
校验,否则请求会被拒绝 access_token
有过期时间,过期后不需要再通过用户名密码去获取token
,而是通过refresh_token
去更新access_token
虽然到目前为止,我们已经拥有了registry和uaa,但是还需要解决2个问题
- 通过前端访问后端资源
- 微服务间互相调用
因此下一步我们会使用JHipster Gateway来实现前端访问后台