2016-04-07 8 views
1

Ich erstelle ein ASP.NET-Web-API-Projekt, das OWUN-OAuth-Bearer-Token-Authentifizierung verwendet. Ich habe die API für eine einzelne Maschine gut funktioniert, aber nicht wirklich verstehen, wie ich die API über einen Lastenausgleich zu mehreren Maschinen skalieren würde. Es scheint, dass der Computer, der den Benutzer/das Passwort authentifiziert und das Bearer-Token bereitstellt, der einzige Computer ist, der dieses Beamtoken für zukünftige Anfragen authentifizieren könnte. Wie kann ich einrichten, dass jeder Rechner hinter dem Load Balancer das Token authentifizieren kann? Ich bin ziemlich neu in dieser Art der Authentifizierung, also vergib mir, wenn meine Terminologie falsch ist.Skalieren von ASP.NET bei der Verwendung von Bearer-Tokens

Antwort

1

Sie müssen das Bearer-Token (oder das JWT-Token) mit demselben audienceId und demselben Zielgruppengeheimnis erstellen. Auf diese Weise kann die Maschine sie korrekt validieren.

ich verwendet sie in meine web.config-Datei zu halten, zum Beispiel wie folgt aus:

<add key="as:AudienceId" value="localhost" /> 
<add key="as:AudienceSecret" value="YVZQUXd6VTZnWkpiR28wV0ROSTZCUzl1RzRRYTRnSDE=" /> 

Dann können Sie sie benutzen, um Ihre jwt Token zu generieren:

internal class CustomJwtFormat : ISecureDataFormat<AuthenticationTicket> 
{ 
    private readonly string _audienceId = SettingsProvider.CurrentAudienceId; 
    private readonly string _issuer = SettingsProvider.CurrentIssuer; 
    private readonly string _symmetricKeyAsBase64 = SettingsProvider.CurrentAudienceSecret; 

    public String Protect(AuthenticationTicket data) 
    { 
     if (data == null) 
     { 
      throw new ArgumentNullException("data"); 
     } 

     var keyByteArray = TextEncodings.Base64Url.Decode(_symmetricKeyAsBase64); 
     var signingKey = new HmacSigningCredentials(keyByteArray); 
     var issued = data.Properties.IssuedUtc; 
     var expires = data.Properties.ExpiresUtc; 

     var token = new JwtSecurityToken(_issuer, _audienceId, data.Identity.Claims, issued.Value.UtcDateTime, 
      expires.Value.UtcDateTime, signingKey); 

     var handler = new JwtSecurityTokenHandler(); 
     var jwt = handler.WriteToken(token); 

     return jwt; 
    } 

    public AuthenticationTicket Unprotect(String protectedText) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Zweitens müssen Sie Verwenden Sie den gleichen Computerschlüssel in web.config auf allen Ihrer Webfarm-Maschine wie folgt:

<machineKey validationKey="9E7EB24C628533D0F2A0B8CE2E740DD524472EA4A68C21325D007D15ED22E7DF81300BBE2AC70B6259CB41F22FA95AAFECA5BE8D72D8F7A80F13FCECE49DFFC1" decryptionKey="340A7B141479D146A50B59FAF7E4DD7218D6310B8D121178FFE3CE2AC198CD34" validation="SHA1" decryption="AES" /> 
Verwandte Themen