Swagger UI 忽略 x-tokenName 扩展
Swagger UI ignoring x-tokenName extension
我在 .net-core 2.1 应用程序中使用 Swashbuckle v5.0.0 来生成我的 api-文档。
我添加了这个安全定义:
cfg.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Name = "oauth2",
Type = SecuritySchemeType.OAuth2,
Scheme = IdentityServerAuthenticationDefaults.AuthenticationScheme,
Extensions = new Dictionary<string, IOpenApiExtension>
{
{ "x-tokenName", new OpenApiString("token id_token") }
},
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
Scopes = swaggerSettings.Scopes,
AuthorizationUrl = new Uri(authorizationUrl),
TokenUrl = new Uri(swaggerSettings.IdentityProviderUrl + "/connect/token"),
}
},
});
这是从中生成的 api 规范(只是重要部分):
它几乎可以完美运行,因为我什至可以大摇大摆地打开以下对话框 ui 并进行完全授权:
但问题是,即使 x-tokenName 值设置为 "token id_token"(这是 required 以接收还包含身份范围的访问令牌,如配置文件和 openid ),swagger发送的请求-ui,fiddler记录下来,是这样的(切到重要的部分):
GET /usermgmt/identityprovider/connect/authorize?response_type=token&[...]
在网络上,我可以找到关于我正在努力实现的目标的线程,它在一段时间内得到了支持,然后不再支持,我不知道现在是否支持 - 似乎不支持,但我认为此功能很重要,所以它应该在那里。
我需要这个,因为我想使用根据 swagger-ui.
请求创建的访问令牌从配置文件端点请求用户组
请帮忙:)
您误解了 Swagger UI 中 x-tokenName
的用途。此扩展指定要提取并随后在 Authorization: Bearer <token>
.
中使用的 OAuth 2.0 令牌端点响应的字段
默认情况下,不记名令牌是从access_token
:
中提取的
{
"access_token": "abcde12345",
"token_type": "Bearer",
"expires_in": 3599,
"id_token": "...."
}
=>
Authorization: Bearer abcde12345
如果安全方案定义指定,例如,x-tokenName: id_token
,则 id_token
的值将用作不记名令牌:
{
"access_token": "....",
"token_type": "Bearer",
"expires_in": 3599,
"id_token": "xyz987"
}
=>
Authorization: Bearer xyz987
关于 x-tokenName
的更多信息:here and here。
I want to achieve that the authorization link swagger ui generates and sends the user to the identity-provider contains "response_type=token id_token&[...]"
id_token
用于 Open ID Connect (OIDC) 流程,它是 OAuth 2.0 的扩展。 Swagger UI 目前 does not support OIDC。
当 Swagger UI 支持 OIDC 时,您还需要将安全方案定义从 type: oauth2
更改为 type: openIdConnect
:
{
...
"components": {
"securitySchemes": {
"openId": {
"type": "openIdConnect",
"openIdConnectUrl": "https://path/to/.well-known/openid-configuration"
}
}
}
}
我在 .net-core 2.1 应用程序中使用 Swashbuckle v5.0.0 来生成我的 api-文档。
我添加了这个安全定义:
cfg.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Name = "oauth2",
Type = SecuritySchemeType.OAuth2,
Scheme = IdentityServerAuthenticationDefaults.AuthenticationScheme,
Extensions = new Dictionary<string, IOpenApiExtension>
{
{ "x-tokenName", new OpenApiString("token id_token") }
},
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
Scopes = swaggerSettings.Scopes,
AuthorizationUrl = new Uri(authorizationUrl),
TokenUrl = new Uri(swaggerSettings.IdentityProviderUrl + "/connect/token"),
}
},
});
这是从中生成的 api 规范(只是重要部分):
它几乎可以完美运行,因为我什至可以大摇大摆地打开以下对话框 ui 并进行完全授权:
但问题是,即使 x-tokenName 值设置为 "token id_token"(这是 required 以接收还包含身份范围的访问令牌,如配置文件和 openid ),swagger发送的请求-ui,fiddler记录下来,是这样的(切到重要的部分):
GET /usermgmt/identityprovider/connect/authorize?response_type=token&[...]
在网络上,我可以找到关于我正在努力实现的目标的线程,它在一段时间内得到了支持,然后不再支持,我不知道现在是否支持 - 似乎不支持,但我认为此功能很重要,所以它应该在那里。
我需要这个,因为我想使用根据 swagger-ui.
请求创建的访问令牌从配置文件端点请求用户组请帮忙:)
您误解了 Swagger UI 中 x-tokenName
的用途。此扩展指定要提取并随后在 Authorization: Bearer <token>
.
默认情况下,不记名令牌是从access_token
:
{
"access_token": "abcde12345",
"token_type": "Bearer",
"expires_in": 3599,
"id_token": "...."
}
=>
Authorization: Bearer abcde12345
如果安全方案定义指定,例如,x-tokenName: id_token
,则 id_token
的值将用作不记名令牌:
{
"access_token": "....",
"token_type": "Bearer",
"expires_in": 3599,
"id_token": "xyz987"
}
=>
Authorization: Bearer xyz987
关于 x-tokenName
的更多信息:here and here。
I want to achieve that the authorization link swagger ui generates and sends the user to the identity-provider contains "response_type=token id_token&[...]"
id_token
用于 Open ID Connect (OIDC) 流程,它是 OAuth 2.0 的扩展。 Swagger UI 目前 does not support OIDC。
当 Swagger UI 支持 OIDC 时,您还需要将安全方案定义从 type: oauth2
更改为 type: openIdConnect
:
{
...
"components": {
"securitySchemes": {
"openId": {
"type": "openIdConnect",
"openIdConnectUrl": "https://path/to/.well-known/openid-configuration"
}
}
}
}