トークン経由でasp net coreプロジェクトの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(client1によって生成されたトークンにヘッダーを挿入しますが、client2に対して呼び出しが行われます)のトークンを挿入した場合
トークンを検証します。
代わりに、トークンが生成されたテナントに対してのみトークンが有効であることを希望します。
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
}
});
と生成トークンのための私のコントローラで:私のstartup.csで
TokenValidationParametersにこのようなあなたがキーにリストを追加することができます
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
);