zoukankan      html  css  js  c++  java
  • .net core使用jwt token

    上一篇转载的文章中解释了jwt的种种,.net core中使用jwt的方式

    使用.net core内置方式实现jwt

    使用JwtSecurityTokenHandler实现生成jwt

    生成 token

    这里我随便定义了一个secret叫mysecret12345678,认证的时候也要用到这个。

            public static string GetJwtAccessToken(ClaimsIdentity claimsIdentity)
            {
                var tokenHandler = new JwtSecurityTokenHandler();
                var key = Encoding.ASCII.GetBytes("mysecret12345678");
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = claimsIdentity,
                    Expires = DateTime.UtcNow.AddHours(10),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };
                var token = tokenHandler.CreateToken(tokenDescriptor);
                return tokenHandler.WriteToken(token);
            }
    

    注入认证

            /// <summary>
            /// 注册JWT Bearer认证服务的静态扩展方法
            /// </summary>
            /// <param name="services"></param>
            /// <param name="appSettings">JWT授权的配置项</param>
            public static void AddJwtBearerAuthentication(this IServiceCollection services)
            {
                //使用应用密钥得到一个加密密钥字节数组
                var key = Encoding.ASCII.GetBytes("mysecret12345678");
                services.AddAuthentication(x =>
                {
                    x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                .AddCookie(cfg => cfg.SlidingExpiration = true)
                .AddJwtBearer(x =>
                {
                    x.RequireHttpsMetadata = true;
                    x.SaveToken = true;
                    x.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuerSigningKey = true,
                        IssuerSigningKey = new SymmetricSecurityKey(key),
                        ValidateIssuer = false,
                        ValidateAudience = false
                    };
                });
            }
    

    services.AddJwtBearerAuthentication();

    添加认证

    注入认证及添加认证后,凡是添加Authorize特性的接口都如使用注入的策略进行认证。
    app.UseAuthentication();

    接口使用认证

    添加两个接口,一个生成token,另一个加上Authorize特性使用认证。如果直接访问testtoken接口会报401,用GetToken接口生成的token去请求testtoken接口执行正常。说明token认证已经生效了。一个最简单的示例完成了。

            [HttpGet]
            public string GetToken()
            {
                var token = JwtBearerAuthenticationExtension.GetJwtAccessToken(new ClaimsIdentity(
                    new Claim[]{
                        new Claim("userId","1"),
                        new Claim("userName","2"),
                        new Claim("userAccount","3")
                    })
                    );
                return token;
            }
    
            [HttpGet("testtoken")]
            [Authorize]
            public string TestToken()
            {
                return "1";
            }
    

    内置方式生成jwt token的困惑

    内置方式生成jwt很简单,从生成到认证,简单一些代码即可完成。但是,我想要刷新token呢,抱歉,要自己去实现。我想要在几个微服务中使用一套呢,抱歉,也比较麻烦。有没有其他方式简单解决呢,有!就是我们接下来讲的IdentityServer4。

    使用IdentityServer4内置方式实现jwt

    IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架。具体的可以查看http://www.identityserver.com.cn/
    后续我会写一系列IdentityServer4实战来实践统一认证和token刷新。

  • 相关阅读:
    Oracle新建用户、角色,授权,建表空间
    oracle 创建表空间、创建用户管理该表空间
    后台获取数据,动态更新到网页--无闪烁刷新
    Java获取当前路径
    最实用销售24种技巧(业务必看)转
    四种类型的客户(转)
    800个小炒
    商务称呼礼仪
    人际沟通交流技巧(转)
    拒绝礼仪与技巧(转)
  • 原文地址:https://www.cnblogs.com/KQNLL/p/13733760.html
Copyright © 2011-2022 走看看