无法使用Flask OIDC和KeyClope访问资源\u access.client-test.roles
我配置了keydove来验证客户端的用户,并将其角色返回到我的应用程序。下面的JSON是KeyClope为我的用户返回的OIDC数据。在数据中,我们可以清楚地看到存在字段资源_access.test-client.roles无法使用Flask OIDC和KeyClope访问资源\u access.client-test.roles,flask,keycloak,openid-connect,Flask,Keycloak,Openid Connect,我配置了keydove来验证客户端的用户,并将其角色返回到我的应用程序。下面的JSON是KeyClope为我的用户返回的OIDC数据。在数据中,我们可以清楚地看到存在字段资源_access.test-client.roles { ....some data.. "allowed-origins": [ "http://localhost:5000" ], "realm_access": { "r
{
....some data..
"allowed-origins": [
"http://localhost:5000"
],
"realm_access": {
"roles": [
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"test-client": {
"roles": [
"DemoRole"
]
},
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
....some data..
}
在我的应用程序端,我使用Flask OIDC进行身份验证并获得我的用户角色
应用程序配置是这样完成的
app.config.update({
'SECRET_KEY': 'u\x91\xcf\xfa\x0c\xb9\x95\xe3t\xba2K\x7f\xfd\xca\xa3\x9f\x90\x88\xb8\xee\xa4\xd6\xe4',
'TESTING': True,
'DEBUG': True,
'OIDC_CLIENT_SECRETS': 'client_secrets.json',
'OIDC_ID_TOKEN_COOKIE_SECURE': False,
'OIDC_REQUIRE_VERIFIED_EMAIL': False,
'OIDC_USER_INFO_ENABLED': True,
'OIDC_SCOPES': ['openid', 'email', 'profile', 'roles'],
'OIDC_VALID_ISSUERS': ['http://localhost:8080/auth/realms/MyDemo'],
'OIDC_OPENID_REALM': 'http://localhost:5000/oidc_callback'
})
客户端_secrets.json是
{
"web": {
"auth_uri": "http://localhost:8080/auth/realms/MyDemo/protocol/openid-connect/auth",
"client_id": "test-client",
"client_secret": "40074399-b1b6-442c-9862-68b655ef8dad",
"redirect_uris": [
"http://localhost:5000/oidc_callback"
],
"userinfo_uri": "http://localhost:8080/auth/realms/MyDemo/protocol/openid-connect/userinfo",
"token_uri": "http://localhost:8080/auth/realms/MyDemo/protocol/openid-connect/token",
"token_introspection_uri": "http://localhost:8080/auth/realms/MyDemo/protocol/openid-connect/token/introspect"
}
}
完成后,我将尝试从以下端点中的用户检索角色
@app.route('/private')
@oidc.require_login
def hello_me():
info = oidc.user_getinfo(['resource_access'])
client = info['test-client']
role = client['roles']
问题是“info”返回为空。我可以访问“email”、“姓氏”和其他字段,但我无法访问“resource\u access”,即使它存在于返回的JSON中。我希望上面的代码序列可以返回用户角色
我做错了什么?声明
资源访问权
可以在访问令牌
和/或id令牌
和/或用户信息响应
中公开。从您的问题描述中不清楚问题的确切位置。显然,它位于错误的位置,而不是应用程序代码所期望的位置
因此,确定索赔的位置,您就可以:
- 惰性选项:在任何地方公开它(
和access-token
和id-token
)userinfo-response
- 正确的选择:阅读已用库的文档,并仅将声明公开到正确的位置(
或access token
或id token
)userinfo response
嗨,简!谢谢你的回答。我正在努力理解文档,但还不清楚。如何在userinfo中正确公开资源访问?应该用钥匙斗篷吗?你有关于如何做的参考吗?Mapper有公开细节的配置。找到了!谢谢