如何解决无法使用Flask-OIDC和Keycloak访问resource_access.client-test.roles
我将Keycloak配置为对客户端用户进行身份验证,并将其角色返回给我的应用程序。以下JSON是Keycloak使用OIDC为我的用户返回的数据。在数据中,我们可以清楚地看到存在字段resource_access.test-client.roles。
{
....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'
})
client_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'被返回为空。我可以访问“电子邮件”,“姓氏”和其他字段,但是我无法访问“ resource_access”,即使它存在于返回的JSON中。我希望上面的代码序列可以让我返回用户角色。
我在做什么错了?
解决方法
声明resource_access
可以暴露在access token
和/或id token
和/或userinfo response
中。从您的问题描述中不清楚它的确切位置。显然,它在错误的位置,而不是您的应用程序代码期望的位置。
因此请确定索赔的位置,您应该可以:
- 惰性选项:将其公开(
access token
,id token
和userinfo response
) - 正确的选择:阅读使用过的库的文档,并仅在正确的位置(
access token
或id token
或userinfo response
)公开版权声明
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。