我在我的asp網絡核心項目中通過令牌實現了WebAPI驗證,我在每次登錄時創建一個令牌,並且一切似乎都起作用。jwt令牌多租戶
我的問題是,應用程序將是多tanancy我,所以我會有很多的子域的客戶端 (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(在客戶端1生成的令牌中插入標頭,但是調用是爲客戶端2生成的)
我驗證令牌。
相反,我希望令牌只對生成它的租戶有效。
在我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, user.UserName),
new Claim(JwtRegisteredClaimNames.FamilyName, user.UserName),
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
);