2017-09-22 2 views
0

Ich frage mich nur, ist es möglich, JWT Token für 2 verschiedene Zielgruppen zu konfigurieren? Zuerst würde ein Token-Ablaufdatum festgelegt werden und das zweite nicht.asp.net Kern Identität - 2 Arten von JWT Token

Ich habe den folgenden Code für JWT-Konfiguration, aber es funktioniert nur für eine einzige Zielgruppe.

private void ConfigureSecurity(IServiceCollection services) 
    { 
     services.AddAuthentication() 
      .AddCookie(cfg => cfg.SlidingExpiration = true) 
      .AddJwtBearer(cfg => 
      { 
       cfg.RequireHttpsMetadata = false; 
       cfg.SaveToken = true; 

       cfg.TokenValidationParameters = new TokenValidationParameters() 
       { 
        ValidateIssuer = true, 
        ValidateAudience = true, 
        RequireExpirationTime = false, 
        ValidIssuer = Configuration["Tokens:Issuer"], 
        ValidAudience = Configuration["Tokens:Issuer"], 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])), 
       }; 
      }); 

     services.AddAuthorization(); 
    } 

Antwort

1

Es gibt ein paar Dinge, die Sie ausprobieren können. Die erste der AddJwtBearer Funktion akzeptiert auch einen Schema-Namen. Sie können versuchen, zwei JwtBearers mit unterschiedlichen Schema-Namen hinzuzufügen. Nicht ganz sicher, ob es mehrere JWTs erlaubt, aber

Eine andere Möglichkeit ist, versuchen Sie, Ihren eigenen JwtEventBearer zu konfigurieren und es auf cfg.Events zu setzen.

Wenn alles andere fehlschlägt, können Sie das jwt immer manuell erstellen und validieren. Sie müssen zunächst die beiden Token-Validierungsparameterobjekte erstellen.

 var handler = new JwtSecurityTokenHandler(); 

     var jwt = handler.CreateJwtSecurityToken(new SecurityTokenDescriptor 
     { 
      Audience = myAudience, 
      Expires = DateTime.UtcNow.Add(Expiary), 
      Subject = myPrincipal, 
      SigningCredentials = Signing 
     }); 

     return handler.WriteToken(jwt); 

Zur Validierung, können Sie zunächst das Publikum überprüfen: Sie können Ihr Token wie folgt erstellen

 var _token = handle.ReadJwtToken(token); 
     if (_token.Audiences == ...) 

Sobald Sie herausfinden, was das Publikum und die Validierungsparameter Token verwenden, können Sie validiere damit:

 SecurityToken sToken = handle.CreateJwtSecurityToken(); 
     var myPrincipal = handle.ValidateToken(token, TokenValidationParameters, out sToken); 
+0

Danke für die Antwort, ich werde es versuchen. – aph5

Verwandte Themen