.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解
.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token
目录
接口认证方式:Bearer Token
一,前言:
因为HTTP协议是开放的,可以任人调用。所以,本次项目接口是不希望被随意调用,就做了访问权限的控制,认证是好的用户,才允许调用API。
二,测试接口:
如果要测试接口,首先要进行登录,登录成功会有个token信息,向api接口发送请求的时候必须带上这个token。
三,注意点:
token一般有时间限制。token期限(开发版本2小时,上线版本7天),token过期将会返回20001状态码。
四,其他事项:
- 用户登录成功将会返回一个token,该token在其后的每次请求中都必须携带,否则将视为无权访问。
- token具有过期时限,如果token过期,即代表用户需要重新重录,获取新的token。
- token必须使用 Bearer Token(Token 令牌) 方式,使用该方式头部会多一个 authorization。
- token即将过期时,系统将返回新的token,请获取响应 header 里面的X-Token进行替换。
- token将设置黑名单,如用户退出,或即将过期的token将会进入黑名单,即无效token
Swagger 使用 Bearer Token
Authorize 授权 (设置token值)
授权成功,点Close关闭窗体
测试接口
点【Try it out】按钮:
点【Execute】按钮:
返回数据成功:
模拟登出
CSFramework.WebApi 框架 Bearer Token/Jwt Token 应用
版本:CSFramework.WebApiV3.0(.NET8/NETCore版)
WebApi服务端配置JWT Token认证
文件名:JwtExtentions
逻辑:启动WebApi服务,设置WebApi授权模式,使用JWT Token认证。
C# 全选
Console.WriteLine("Config Jwt...");
services.AddJwtBearer(_Configuration, "jwt");
C# 全选
public static IServiceCollection AddJwtBearer(this IServiceCollection services, IConfiguration configuration, string sectionName)
{
//获取jwt参数配置
services.Configure<JwtOptions>(configuration.GetSection(sectionName));
var myOptions = configuration.GetSection(sectionName).Get<JwtOptions>();
//设置授权模式
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;//Bearer模式
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
JwtHelper.ConfigJwt(x, myOptions);
});
return services;
}
WebApi 服务端写入 Bearer Token/Jwt Token 值
文件名:JwtHelper.cs
逻辑:用户登录成功,授权服务器写入token值。
C# 全选
public static string WriteJwtToken(JwtOptions options, JwtClaimData claim)
{
var claims = new[]
{
//new Claim(ClaimTypes.Name, claim.UserId??"") ,
new Claim("userId", claim.UserId??"") ,
new Claim("userName" , claim.UserName??"") ,
new Claim("publicKey" , claim.PublicKey??"") ,
new Claim("appId" , claim.AppId??"") ,
new Claim("language" , claim.Language??"") ,
new Claim("dbid" , claim.DBID??"") ,
new Claim("phone" , claim.Phone??"") ,
};
var key = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Secret));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var jwtToken = new JwtSecurityToken(
issuer: options.Issuer,
audience: options.Audience,
notBefore: DateTime.Now,
expires: DateTime.Now.AddHours(options.AccessExpireHours),
claims: claims,
signingCredentials: credentials);
//生成token字符串
var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);
return token;
}
客户端调用
C# 全选
using HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网