我想在我的应用程序中使用Swagger来使用JWT承载令牌授权。当我使用邮递员工具授权工作很好。但是,当我尝试使用Swagger进行授权时,控制器方法总是返回未授权,即使在传递令牌之后也是如此。
我是不是缺少了一些用于接受令牌的代码行?实现的代码如下所示。
public void ConfigureServices(IServiceCollection services)
{
// Register the Swagger generator, defining one or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "XYZ API", Version = "v1", Description = "This is a API for XYZ client applications.", });
c.IncludeXmlComments(GetXmlCommentsPath());
c.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "Please paste JWT Token with Bearer + White Space + Token into field", Name = "Authorization", Type = "apiKey" });
//c.AddSecurityDefinition("basic", new BasicAuthScheme { Type = "basic" });
});
services.AddCors(config =>
{
var policy = new CorsPolicy();
policy.Headers.Add("*");
policy.Methods.Add("*");
policy.Origins.Add("*");
policy.SupportsCredentials = true;
config.AddPolicy("policy", policy);
});
services.AddAuthorization(auth =>
{
auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser().Build());
});
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = _signingKey,
ValidAudience = "Audience",
ValidIssuer = "Issuer",
// ClockSkew = TimeSpan.FromMinutes(0)
ClockSkew = TimeSpan.Zero
};
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("policy");
app.UseAuthentication();
app.UseMvc();
// Enable middleware to serve generated Swagger as a JSON endpoint.
app.UseSwagger();
// Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint.
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "XYZ API V1");
});
}
Controller
[Authorize("Bearer")]
[Route("api/[controller]")]
public class ValuesController : Controller
{
}
您还需要在swagger模式定义中添加AddSecurityRequirement
,以表明该模式适用于API中的所有操作。如下所示:
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
{
{ "Bearer", new string[] { } }
});
因此,完整的定义将是:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "XYZ API", Version = "v1", Description = "This is a API for XYZ client applications."});
c.IncludeXmlComments(GetXmlCommentsPath());
c.AddSecurityDefinition("Bearer", new ApiKeyScheme
{
In = "header",
Description = "Please paste JWT Token with Bearer + White Space + Token into field",
Name = "Authorization",
Type = "apiKey"
});
c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
{
{ "Bearer", new string[] { } }
});
});
我已经阅读了许多帖子,所有我能找到的Google文档,并尝试了以下的许多迭代,但仍然无法获得访问和刷新令牌。我确实获得了授权代码,但似乎无法获得该代码来交易访问和刷新令牌。 这样,我就可以在我的属性中剪切并粘贴一个访问代码(只是测试并尝试让它先工作)来获得刷新和访问令牌。 在initRefreshToken()方法中,源代码如下: 如果这是第二次或以后使用该代码,将打印以下内容: 推荐令牌: **
我正在尝试将现有的acquire token实现从ADAL迁移到MSAL。我能够获得访问令牌,grant_type=auth_code流工作正常。 但是,当我试图实现范围为offline_access的grant_type=refresh_token时,问题就来了,尽管我在调试代码时能够看到refresh _Tooken,但由于MSAL没有将refresh-token公开给客户端,所以我没有将其作
寻求有关如何进行微服务授权的建议。 我使用spring/spring boot来提供所有的微服务 在使用JWT令牌到达实际微服务之前,我可以通过Spring Cloud网关进行身份验证,但是在授权方面,我不确定如何做到这一点。 我想在内部处理business microservice中每个endpoint的授权。 有没有办法将JWT令牌传递给微服务,或者我需要调用authserver来获取用户中的
我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut
我在我的Google-drive API中有刷新令牌和访问令牌。但是我不想每次用户使用我的API时都请求一个新的访问令牌,因为我存储了我的刷新令牌。如何从刷新令牌中获取新访问令牌
我有一个react/Gatsby web应用程序,它使用Aws Cognito身份验证。该应用程序调用aws api网关上托管的几个rest api,该网关再次使用Cognito Authorizer。当用户第一次登录到发送到api网关的每个请求的授权头时,我需要传递cognito发出的身份验证jwt令牌。我应该把代币安全地存放在哪里? 谢谢,
在react和node之间构建基于JWT的身份验证系统时,我看到了不同的解决方案。有很多例子,其中很多都使用不同的标题。 标题之间有什么区别 授权 x-auth-token x-access-token 什么时候应该使用它们?例如,在这个答案中,有一个解释是授权将被使用。然而,正如链接到此处的另一个答案所述,它指出“授权头通常(但不总是)在用户代理首次尝试在没有凭据的情况下请求受保护的资源之后发送
我想要一些关于如何在隐式授予流中使用ID令牌和访问令牌的澄清。我有一个使用msal.js for Angular包的Angular SPA和一个Web API。API不调用任何外部服务,如MSFT Graph。后端仅使用JWT中的角色声明来建立对API功能的RBAC授权。 这个文档写着:https://docs.microsoft.com/en-us/azure/active-directory/