在带有React前端的Flask应用上使用Keycloak进行仅承载身份验证

时间:2019-06-04 16:38:37

标签: reactjs flask keycloak

我正在尝试开发一个可与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还会尝试再次重定向到登录页面,从而导致错误。

1 个答案:

答案 0 :(得分:0)

这完成了您想要的。但是,它在中间引入了另一个步骤,即api网关(Kong)。检查这两个部分,您将能够创建一个与由Keycloak保护的api交互的客户端。

Secure apis with Kong and Keycloak part 2