java接口令牌_关于java:KeyCloak用户验证和获取令牌

首先,我对Keycloak非常陌生,请问如果我要问的问题可能是错的。

我已经安装了Keycloak服务器,并且可以使用以下命令访问Web UI:

http:// localhost:8008 / auth

我的要求是通过将其传递给k来验证领域用户

Keycloak API并从那里获取令牌作为响应,然后将此令牌传递给我的其他Web API调用。

但是我找不到关于如何执行此操作的简单指南...

更新:

从KEYCLOAK使用UI:

到目前为止:

我可以创建一个realm:

例如:DemoRealm

在realm下,我创建了客户端:

例如:DemoClient

在客户端下,我创建了用户:

例如:DemoUser

使用POSTMAN:

我也能够成功使用获取令牌

http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token

POST:

{

"grant_type":"client_credentials",

"username":"",

"password":"",

"client_secret":"",

"client_id":"DemoClient"

}

作为回应,我得到了令牌。

{

"access_token":"eyJhbGciOiJSUzI1NiIsINVSHGhepnDu13SwRBL-v-y-04_6e6IJbMzreZwPI-epwdVPQe-ENhpvms2WdGM_DmgMLZ8YQFS4LDl9R7ZHT8AgXe-WCFV6OFkA7zvdeFwQ4kVVZE0HlNgHgoi4DrgMfwwz_ku1yJNJP3ztTY1nEqmA",

"expires_in": 300,

"refresh_expires_in": 1800,

"refresh_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRRnB5YlloMGVEektIdlhOb3JvaFUxdlRvWVdjdP3vbfvk7O0zvppK9N4-oaUqZSr0smHv5LkuLDQYdPuxA",

"token_type":"bearer",

"not-before-policy": 0,

"session_state":"bb1c586a-e880-4b96-ac16-30e42c0f46dc"

}

此外,我深入研究了更多细节,并找到了此API指南:

http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource

在本指南中,提到了我可以使用

获取用户返回用户列表,根据查询参数进行过滤

GET /admin/realms/{realm}/users

但是,当我使用POSTMAN获取用户时,我得到403错误代码。我正在传递与在上一步中获得的身份验证相同的令牌。

http://localhost:8080/auth/admin/realms/DemoRelam/users

谁能指导我?

您是说您刚刚安装了密钥斗篷并在未将其与我们的应用程序集成时运行它吗?如果您在Internet和Keycloak文档中看到太多可用的内容,如何将Keycloak与Web应用程序集成

@SubodhJoshi我不想将keycloak与Web应用程序集成。我要在relam下传递用户/客户端并获得令牌,然后将此令牌传递给其他一些api再次验证该令牌

使用ui可能无法使用keycloak rest api或admin-cli。

@SubodhJoshi我已经更新了我的问题,直到现在您能帮助我。

我认为这会对您有所帮助。已经获得了访问令牌,但不知道如何使用邮递员对此进行测试。 >您只需要在Postman中添加authrisation标头,已经获得了访问令牌,但是不知道如何使用Postman进行测试。 >您只需要在Postman中添加授权标头,stackoverflow.com/questions/24709944/我发现这对您是否有帮助,否则我只能在早上用手机记录时才写正确的答案。

@SubodhJoshi非常感谢您,我将发布其是否有效。现在还有一个问题,我可以在客户端级别获取令牌,是否可以在用户级别获取令牌

@SubodhJoshi我认为它正在认证,所以我没有得到401,而是得到了403错误代码。似乎是一些授权错误。我不知道我为什么要这个

禁止的403告诉我们,我们无权查看所请求的资源,这主要是由于允许。在许多情况下,如果您使用https且未将证书导入客户端,则会抛出403禁止错误。

看到这一定会对您有所帮助。 stackoverflow.com/q/46470477/476828

@SubodhJoshi非常感谢您的工作。

@SubodhJoshi现在还有一个问题,我正在客户端级别获得令牌,是否可以在用户级别获得令牌

在这里为您服务。出于多种原因,通过REST端点为普通用户获取令牌不是正确的方法。它不是SSO,安全性较差,它向应用程序等公开了身份验证详细信息和凭据。

@SubodhJoshi所以你的意思是说在一个客户端下会有一组用户,然后我们需要获取该客户端的令牌而不是单个用户。如果我错了,请纠正我。

每个领域可能包含或可能不包含一个以上的客户端。如果您要检查主领域,则默认情况下它具有多个客户端,并且领域仅包含一个以上的用户/组等信息。

您有两种选择:您可以代表某个用户行事(如Adnan Khan指出的那样),或为此创建专用的客户。

代表用户

1)创建一个机密客户(我想您已经有一个)

2)创建一个用户并为其分配适当的角色: realm-management组中的view-users

3)获取令牌(我正在使用curl和jq):

KCHOST=https://yourkeycloak.com

REALM=realm

CLIENT_ID=confidential-client

CLIENT_SECRET=xxxxxxx-yyyyyy-zzzzzzzz

UNAME=user

PASSWORD=passwd

ACCESS_TOKEN=`curl \

-d"client_id=$CLIENT_ID" -d"client_secret=$CLIENT_SECRET" \

-d"username=$UNAME" -d"password=$PASSWORD" \

-d"grant_type=password" \

"$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4)最后调用Admin REST API用户终结点:

curl -X GET -H"Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

代表客户(服务帐户)

1)创建一个机密客户端,并确保将"启用服务帐户"设置切换为On

2)转到Service account roles tab并为此客户端选择适当的角色,例如realm-management组中的realm-admin

3)获取访问令牌

KCHOST=https://yourkeycloak.com

REALM=realm

CLIENT_ID=protector-of-the-realm

CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz

ACCESS_TOKEN=`curl \

-d"client_id=$CLIENT_ID" -d"client_secret=$CLIENT_SECRET" \

-d"grant_type=client_credentials" \

"$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4)调用REST API端点:

curl -X GET -H"Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

P.S. For debugging I have just written a CLI tool called brauzie that

would help you fetch and analyse your JWT tokens (scopes, roles, etc.). It could

be used for both public and confidential clients. You could as well

use Postman and https://jwt.io

HTH :)

keycloak中的用户是特定于领域的,并非每个用户都可以访问它们。在管理控制台中为用户分配特定角色后,您将能够通过admin API获得所有用户。简单地做

在管理控制台中,转到

Users > myuser > Role Mappings > Client roles > realm-management

为用户分配两个角色manage-users或view-users中的任何一个。

生成一个新令牌。

使用新令牌命中API

您将拥有您的用户

附言:我认为您应该将问题标题更新为更相关的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值