无法将flaskoidc与KeyClope公用客户端一起用于API调用

2024-06-26 17:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Flask应用程序与使用两种端点装饰器的keydape public连接:@oidc.require_login和@oidc.accept_token。然而,我遇到了以下问题

对于KeyClope机密客户端,我可以访问Flask应用程序中的所有端点。这是我的应用程序配置:

flask_app.config.update({
    'SECRET_KEY': 'no-body-knows',
    'TESTING': True,
    'DEBUG': True,
    'OIDC_CLIENT_SECRETS': 'client_secrets.json',
    'OIDC_OPENID_REALM': 'testrealm',
    'OIDC_INTROSPECTION_AUTH_METHOD': 'client_secret_post',
    'OIDC_SCOPES': ['openid', 'email', 'profile'],
    'OIDC_COOKIE_SECURE':True,
    'OIDC_CALLBACK_ROUTE':'/oidc_callback',
    'OIDC_TOKEN_TYPE_HINT': 'access_token',
    'OIDC_RESOURCE_SERVER_ONLY':False
})

以及我的(经过消毒的)客户的内容_secrets.json

{
    "web": {
        "client_id": "confidential-client",
        "client_secret": "axxxxxxx-1xxx-5xxx-exxxx-2xxxxxxx",
        "auth_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/auth", 
        "token_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/token",
        "issuer": "https://my-keycloak-url.com/auth/realms/testrealm",
        "userinfo_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/userinfo",
        "token_introspection_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/token/introspect",        
        "redirect_uris": [
            "http://localhost:5000/oidc_callback"
        ],
        "bearer_only
": "true"
    } 
}

对于publickeydape客户端,我修改了client_secrets.json如下(只需将client_secret设置为空字符串:

{
    "web": {
        "client_id": "public-client",
        **"client_secret": "",**
        "auth_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/auth", 
        "token_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/token",
        "issuer": "https://my-keycloak-url.com/auth/realms/testrealm",
        "userinfo_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/userinfo",
        "token_introspection_uri": "https://my-keycloak-url.com/auth/realms/testrealm/protocol/openid-connect/token/introspect",        
        "redirect_uris": [
            "http://localhost:5000/oidc_callback"
        ],
        "bearer_only": "true"
    } 
}

但是,当我在公钥斗篷客户端下部署此Flask时,我仍然可以访问@oidc.require_登录端点,但是@oidc.accept_tokenAPI端点返回此错误:

{"error": "invalid_token", "error_description": "Token required but invalid"}. 

使用KeyClope公共客户端是此Flask应用程序所在的微服务环境的一项要求。我不控制此要求,其他微服务(用Java、Angular等编写)对此KeyClope配置没有任何问题

有没有一种方法可以使用@oidc.accept_tokendecorator将keydape公共客户端与flask oidc端点一起使用?在我看来,这是一种常见的oidc场景

我在Python3.8.6上使用 烧瓶1.0.2 第1.4.0节


Tags: httpscomclienttokenauthurlmyuri