1

Javascript クライアントから呼び出している Flask rest api があります。Keycloakを認証サーバーとして統合しようとして、フラスコ(flask_oidcを使用)で成功しなかったため、最初にjavascriptクライアント(動作する)から認証を行い、次にトークンを使用してフラスコの残りのAPIと通信しました。

ただし、トークンを使用してレスト サービスを呼び出そうとすると、次のエラーが発生します。

ERROR:flask_oidc:ERROR: Unable to get token info
  ERROR:flask_oidc:'token_introspection_uri'
  Traceback (most recent call last):
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
      response = self.handle_exception(e)
    File "/app/env/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
      return cors_after_request(app.make_response(f(*args, **kwargs)))
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
      reraise(exc_type, exc_value, tb)
    File "/app/env/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
      raise value
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
      response = self.full_dispatch_request()
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
      rv = self.handle_user_exception(e)
    File "/app/env/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
      return cors_after_request(app.make_response(f(*args, **kwargs)))
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
      reraise(exc_type, exc_value, tb)
    File "/app/env/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
      raise value
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
      rv = self.dispatch_request()
    File "/app/env/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
      return self.view_functions[rule.endpoint](**req.view_args)
    File "/app/env/lib/python3.6/site-packages/flask_oidc/__init__.py", line 860, in decorated
      return view_func(*args, **kwargs)
    File "/app/controller/engine.py", line 111, in welcome
      return json.dumps('Welcome %s' % g.oidc_token_info['sub'])
    File "/app/env/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
      return getattr(self._get_current_object(), name)
  AttributeError: '_AppCtxGlobals' object has no attribute 'oidc_token_info'

これは、フラスコ内の私のコード、設定、およびkeycloak.jsonです。

OIDC_CLIENT_SECRETS='/app/keycloak.json',
OIDC_RESOURCE_SERVER_ONLY='true',
OIDC_INTROSPECTION_AUTH_METHOD='bearer'

...

{
  "web": {
    "client_id": "MyClient",
    "client_secret": "xxxxxx-xxxxx-xxxxx-xxxx-xxxxxxxxxxx",
    "token_introspection_uri": "http://myservice_auth/auth/realms/myservice/protocol/openid-connect/token/introspect",
    "token_uri": "http://myservice_auth/auth/realms/myservice/protocol/openid-connect/token",
    "auth_uri": "http://myservice_auth/auth",
    "realm": "myservice",
    "ssl-required": "external",
    "resource": "MyClient",
    "public-client": true,
    "use-resource-role-mappings": true,
    "confidential-port": 0
  }
}

...

oidc = OpenIDConnect(app)

@app.route('/welcome', methods=['GET'])
@oidc.accept_token()
def welcome():
    return json.dumps('Welcome %s' % g.oidc_token_info['sub'])

何か案は?

更新 httplib2 を 0.11.3 にダウングレードしたところ、エラーは次のようになりました。

ERROR:flask_oidc:ERROR: Unable to get token info
ERROR:flask_oidc:[Errno 111] ECONNREFUSED

また、残りのエントリポイントを定義するときにデコレータに追加さ(require_token=True)れ、次にポストマンで、javascript クライアントで取得したのと同じトークン (認証に成功) を使用してサービスへの取得要求を実行しようとすると、次のエラーが発生します。@oidc.accept_token

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

4

0 に答える 0