C#   发布时间:2022-04-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jwt-在asp.net core中使用jwt大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

JWT学习文章:

第一篇:JWT原理

第二篇:JWT原理实现代码

第三篇:在asp.net core中的使用JWT


 前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证。如果要看前两篇文章,点击上面的连接就能够链接过去。

第二篇文章实现jwt原理时有同学就说每个成熟的框架中都有相应的jwt实现或集成。说的不错,每个主流的框架中几乎毫无例外的都集成了jwt的实现,但是我们上篇文章的重点是希望大家能够明白原理,和这些框架中实现的基本思路,如无特殊情况也没有必要自己来写。

那么这篇文章我们就来看看asp.net core中jwt如何使用!

注意,本文主要是代码,必要的文字说明我已经都在代码注释中写出来了。文末我会给出源码地址。


新建一个空的asp.net core项目:

新建一个类Const放置一些常量:

public class Const

{

    public const String SecurityKey = "@H_354_42@mIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSfLGu+kcFDcJUCV46J+SbgR0lNc2NqgCGzojQTWW9xqjuzPF3mpisvTggYZSGfBzN+88YLZYbBLrDTUMJ4nTieElbP6SHkBFu8F+7fFBi7w3UPsaAXDr2E2srQYU5ZlKAcFBoNajNWj3sfSVRoYRPdqDTj4WdJlUPSNGz0wgRrQIDAQAB";

    public const String Domain = "http://localhost:5000";

}
@H_197_65@

 

Startup中向应用添加jwt验证服务:

//添加jwt验证:

services.AddAuthentication(JwtBearerDefaults.AuthenticationscheR_268_11845@E)

    .AddJwtBearer(options => {

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = true,//是否验证Issuer

                        ValidateAudience = true,//是否验证Audience

                        ValidateLifetime = true,//是否验证失效时间

                        ClockSkew = TimeSpan.FromSeconds(30),

            ValidateIssuerSigningKey = true,//是否验证SecurityKey

                        ValidAudience = Const.Domain,//Audience

                        ValidIssuer = Const.Domain,//Issuer,这两项和前面签发jwt的设置一致

                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey))//拿到SecurityKey

                    };

    });
@H_197_65@

 

管道中添加jwt验证:

//添加jwt验证

app.UseAuthentication();
@H_197_65@

由于管道有执行顺序的特性,因此最好放在管道的开始位置。

 

添加登录获取token的接口:

[ApiController]

[Route("[controller]")]

public class AuthController : ControllerBase

{

    [AllowAnonymous]//指定此属性应用于的类或方法不需要授权。

    [httpGet]

    public IActionResult Get(String userName, String pwd)

    {

        if (!String.IsNullOrEmpty(userName) && !String.IsNullOrEmpty(pwd))

        {

            var claims = new[]

            {

                    new Claim(JwtRegisteredClaimnames.Nbf,$"{new datetiR_268_11845@eOffset(datetiR_268_11845@e.Now).ToUnixTimeSeconds()}") ,

                    new Claim (JwtRegisteredClaimnames.Exp,$"{new datetiR_268_11845@eOffset(datetiR_268_11845@e.Now.Addminutes(30)).ToUnixTimeSeconds()}"),

                    new Claim(ClaimTypes.Name, userName)

                };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey));

            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(

                issuer: Const.Domain,

                audience: Const.Domain,

                claims: claims,

                expires: datetiR_268_11845@e.Now.Addminutes(30),

                signingCredentials: creds);

 

            return Ok(new

            {

                token = new JwtSecurityTokenHandler().WriteToken(token)

            });

        }

        else

        {

            return Badrequest(new { message = "username or password is incorrect." });

        }

    }

}
@H_197_65@

方法中对用户名和密码的验证只是简单的验空,实际应用中会更复杂,也会与数据库中的数据比对。

 

接下来就是对jwt的应用了。

新建HomeController,用于验证jwt是否成功启用:

[ApiController]

[Route("[controller]")]

public class HomeController : ControllerBase

{

    [httpGet]

    [Route("api/value1")]

    public ActionResult<IEnumerable<String>> Get()

    {

        return new String[] { "value1", "value1" };

    }

 

    [httpGet]

    [Route("api/value2")]

    [Authorize]

    public ActionResult<IEnumerable<String>> Get2()

    {

        return new String[] { "value2", "value2" };

    }

}
@H_197_65@

其中Get()方法不需要验证,Get2()需要验证。


 测试:

先测试Get()方法(接口名称时api/value1),因为此方法不用验证:

 

jwt-在asp.net core中使用jwt

验证成功!!!

 

接下来测试Get2():

jwt-在asp.net core中使用jwt

访问Get2()方法的接口名api/value2,粘贴上面获得的token到header中:

 

jwt-在asp.net core中使用jwt

验证成功!!!

 

总结:至此,使用asp.net core 自带的jwt方法就完成了。


源码地址:https://gitee.com/jingboweilanGO/Demo_jwt_core.git

说明:Demo-jwt-core是本篇文章涉及到的源码,是使用asp.net core 自带的jwt方法;

     Demo-jwt-core2是上一篇文章的源码,根据jwt原理实现的代码。

大佬总结

以上是大佬教程为你收集整理的jwt-在asp.net core中使用jwt全部内容,希望文章能够帮你解决jwt-在asp.net core中使用jwt所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: