gpt4 book ai didi

oauth-2.0 - 在 Swashbuckle 中启用 Oauth2 客户端凭据流

转载 作者:行者123 更新时间:2023-12-02 07:59:26 29 4
gpt4 key购买 nike

我正在使用 IdentityServer3 通过客户端凭据授予来保护 Web API。对于文档,我使用 Swashbuckle,但无法弄清楚如何在 SwaggerConfig 中为客户端凭据(应用程序)流程启用 Oauth2。任何帮助将不胜感激!

最佳答案

我能够让这个工作。大部分答案都可以在 here 找到.

为了让 client_credential 授权发挥作用,我必须更改一些部分。第一部分位于 EnableSwagger 和 EnableSwaggerUi 调用中:

config.EnableSwagger(c => 
{
c.SingleApiVersion("v1", "sample api");
c.OAuth2("oauth2")
.Description("client credentials grant flow")
.Flow("application")
.Scopes(scopes => scopes.Add("sampleapi", "try out the sample api"))
.TokenUrl("http://authuri/token");
c.OperationFilter<AssignOAuth2SecurityRequirements>();
}).EnableSwaggerUi(c =>
{
c.EnableOAuth2Support("sampleapi", "samplerealm", "Swagger UI");
});

这里重要的变化是 .Flow("application") 我还使用了 .TokenUrl 调用而不是 .AuthorizationUrl 这只是取决于您设置的特定授权方案。

我还使用了稍微不同的AssignOAuth2SecurityRequirements

public class AssignOAuth2SecurityRequirements : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var authorized = apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>();
if (!authorized.Any()) return;

if (operation.security == null)
operation.security = new List<IDictionary<string, IEnumerable<string>>>();

var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
{
{"oauth2", Enumerable.Empty<string>()}
};

operation.security.Add(oAuthRequirements);
}
}

这应该足以显示身份验证开关。对我来说另一个问题是设置了默认身份验证对话框,因此用户只需选择范围,然后单击授权。就我而言,由于我设置身份验证的方式,这不起作用。我必须在 swagger-oauth.js 脚本中重新编写对话框并将其注入(inject)到 SwaggerUI 中。

关于oauth-2.0 - 在 Swashbuckle 中启用 Oauth2 客户端凭据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752900/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com