如何解决尝试获取“ openid_id”和“ role”字段时,带有Keycloak的烧瓶OIDC返回None
我正在尝试使用Flask-ODBC + Keycloak构建一些测试应用程序。
我成功启动了Keycloak,创建了一个领域,一个角色和一个为其分配角色的用户。现在,我尝试从OpenIDConnect对象获取“角色”和“ openid_id”字段,但是这两个字段都返回None。
我的应用程序代码如下
import json
import flask
from flask import Flask,render_template,g
import flask_login
from flask_login import login_required
from flask_oidc import OpenIDConnect
from model.user import User
app = Flask(__name__)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
# Our mock database.
users = {'foo@bar.com': {'pw': 'secret'}}
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_VALID_ISSUERS': ['http://localhost:8080/auth/realms/MyDemo'],'OIDC_OPENID_REALM': 'http://localhost:5000/oidc_callback'
})
oidc = OpenIDConnect(app)
@app.route('/')
def hello_world():
if oidc.user_loggedin:
return ('Hello,%s,<a href="/private">See private</a> '
'<a href="/logout">Log out</a>') % \
oidc.user_getfield('email')
else:
return 'Welcome anonymous,<a href="/private">Log in</a>'
@app.route('/private')
@oidc.require_login
def hello_me():
info = oidc.user_getinfo(['email','openid_id','role'])
print(info)
return ('Hello,%s (%s)! <a href="/">Return</a>' %
(info.get('email'),info.get('openid_id')))
@app.route('/api')
@oidc.accept_token(True,['openid'])
def hello_api():
return json.dumps({'hello': 'Welcome %s' % g.oidc_token_info['sub']})
@app.route('/logout')
def logout():
oidc.logout()
return 'Hi,you have been logged out! <a href="/">Return</a>'
if __name__ == '__main__':
app.run('localhost',port=5000)
在hello_me()内部,我尝试获取'openid_id'和'role'并进行打印。问题是我在这些字段中没有显示。我可以正确收到电子邮件。
您能帮我找出我犯的错误吗?
解决方法
https://flask-oidc.readthedocs.io/en/latest/
user_getinfo(字段,access_token =无)
返回:请求字段的当前用户的值。键是字段名称,值是OpenID提供程序指示的字段值。请注意,缺少提供者未提供的字段。
您的提供者(Keycloak)显然没有公开令牌中的openid_id
详细信息,因此该字段不存在。很可能您没有在Keycloak中正确配置OIDC客户端。确保已在Keycloak中为使用的OIDC客户端添加了正确的映射器/作用域,从而将请求的详细信息公开到openid_id
声明中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。