我正在为单页应用程序 (SPA) 构建一个 Web API,其中用户使用带有 PKCE 的授权代码流通过第三方授权服务器进行身份验证。此 API 使用生成的 OpenAPI 定义和 Swagger UI 界面进行记录。
使用 API Platform 3.1(构建 Web API 的框架),我能够从 Swagger UI 配置授权按钮,使其完全按照我想要的方式运行,而无需任何 Swagger UI 自定义:
请注意,API 平台显然“集成了 Swagger UI 的定制版本”,因此 PKCE 支持可能特定于其 Swagger UI 版本。
但是,我无法使用其他使用普通 Swagger UI 的工具来使用带有 PKCE 的授权代码流(但我可以将其配置为使用不带 PKCE 扩展的正常授权代码流)。
使用 PKCE 的授权代码流在(普通)Swagger UI 中可用吗?这个授权方法可以使用OpenAPI 3.0记录吗?
是的,vanilla SwaggerUI 支持 PKCE!
我使用以下命令在 docker 中使用 PKCE 运行 SwaggerUI:
docker run --rm -p 80:8080 \
-v ~/Desktop/SWAGGER_UI:/foo \
-e SWAGGER_JSON=/foo/my-service-openapi.yml \
-e OAUTH_CLIENT_ID=my-service-client-id \
-e OAUTH_SCOPES="openid offline" \
-e OAUTH_USE_PKCE=true \
swaggerapi/swagger-ui
(将您的 OpenAPI 规范放入“~/Desktop/SWAGGER_UI/my-service-openapi.yml”)
您可以在此处
查看设置在 OpenAPI 规范中,您可以按照此处的描述来定义它! 您必须更改为“authorizationCode”:
components:
securitySchemes:
oAuthSample:
type: oauth2
description: This API uses OAuth 2
flows:
authorizationCode:
authorizationUrl: https://your-host.com/oauth2/auth
tokenUrl: https://your-host.com/oauth2/token
refreshUrl: https://your-host.com/oauth2/token
scopes:
openid: openid scope
offline: offline scope