2017-04-15 18 views
4

トークン経由で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 
    ); 

答えて

0

、オーディエンスなど

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