加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – jwt令牌多租户

发布时间:2020-12-16 09:32:49 所属栏目:asp.Net 来源:网络整理
导读:我通过令牌在我的asp网络核心项目WebAPI验证中实现,我在每次登录时创建一个令牌,一切似乎都有效. 我的问题是该应用程序将是多个我,所以我将有许多子域客户端 (Client1.myapp.com,client2.myapp.com,client3.myapp.com) 服务器端我管理蜜蜂的应用程序将接受一
我通过令牌在我的asp网络核心项目WebAPI验证中实现,我在每次登录时创建一个令牌,一切似乎都有效.

我的问题是该应用程序将是多个我,所以我将有许多子域客户端
(Client1.myapp.com,client2.myapp.com,client3.myapp.com)

服务器端我管理蜜蜂的应用程序将接受一个参数,该参数将成为租户的名称.
一些例子:

apimyapp.com/client1/api/generateToken

apimyapp.com/client2/api/generateToken

apimyapp.com/client3/api/generateToken

现在,如果我从client1创建令牌,并且我调用了apimyapp.com/client2/api/users(在client1生成的令牌中插入标头,但是调用client2)

我验证令牌.

相反,我希望令牌仅对生成它的租户有效.

在我的startup.cs中:

app.UseJwtBearerAuthentication(new JwtBearerOptions()
        {
            AutomaticAuthenticate = true,AutomaticChallenge = true,TokenValidationParameters = new TokenValidationParameters()
            {
                ValidIssuer = _config["Tokens:Issuer"],ValidAudience = _config["Tokens:Audience"],ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"])),ValidateLifetime = true
            }
        });

并在我的控制器中生成令牌:

var userClaims =  _userManagerRepository.GetClaims(user);

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub,user.UserName),new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString()),new Claim(JwtRegisteredClaimNames.GivenName,new Claim(JwtRegisteredClaimNames.FamilyName,new Claim(JwtRegisteredClaimNames.Email,user.Email)
    }.Union(userClaims);

    var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
    var creds = new SigningCredentials(key,SecurityAlgorithms.HmacSha256);

    var token = new JwtSecurityToken(
        issuer: _config["Tokens:Issuer"],audience: _config["Tokens:Audience"],claims: claims,expires: DateTime.UtcNow.AddMinutes(90),signingCredentials: creds
    );

解决方法

您可以在密钥,受众等上添加列表,如TokenValidationParameters

ValidAudiences = new List<string> 
        {
            "AUDIENCE1","AUDIENCE2" 
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读