我正在尝试开发一个可与Flask后端一起使用并使用Keycloak进行身份验证的React前端应用程序。想法是,后端应用程序应仅验证令牌,而不重定向任何未经身份验证的请求,因此它将在仅承载模式下工作。
client_secrets.json:
{
"web": {
"auth_uri": "https://login.local/auth/realms/master/protocol/openid-connect/auth",
"client_id": "myapp",
"issuer": "https://login.local/auth/realms/master",
"client_secret": "secret_from_keycloak",
"redirect_uris": [
"http://192.168.117.2:5010/*"
],
"userinfo_uri": "https://login.local/auth/realms/master/protocol/openid-connect/userinfo",
"token_uri": "https://login.local/auth/realms/master/protocol/openid-connect/token",
"token_introspection_uri": "https://login.local/auth/realms/master/protocol/openid-connect/token/introspect",
"bearer_only": "true"
}
}
app.py:
app.config.update({
'SECRET_KEY': 'my_secret',
'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_VALID_ISSUERS': ['https://login.local/auth/realms/master'],
'OIDC_OPENID_REALM': 'http://192.168.117.2:5010/oidc_callback',
'OIDC_INTROSPECTION_AUTH_METHOD': 'client_secret_post',
'OIDC_TOKEN_TYPE_HINT': 'access_token',
})
oidc = OpenIDConnect(app)
反应配置:
const keycloak = Keycloak({
"clientId": "myapp",
"realm": "master",
"url": "https://login.local/auth",
"credentials": {
"secret": "secret_from_keycloak"
},
});
keycloak.init({onLoad: 'login-required'}).success(authenticated => {
this.setState({keycloak: keycloak, authenticated: authenticated}
, () => {
this.fetchData();
})
});
使用以下配置,当用户访问React应用程序时,它会重定向到Keycloak登录页面,但之后Flask还会尝试再次重定向到登录页面,从而导致错误。
答案 0 :(得分:0)
这完成了您想要的。但是,它在中间引入了另一个步骤,即api网关(Kong)。检查这两个部分,您将能够创建一个与由Keycloak保护的api交互的客户端。