2017-10-20 5 views
0

Ich verwende die Azure Mobile Services-Bibliothek und versuche, einen benutzerdefinierten Identitätsanbieter zu erstellen. Ich verwende den Server in Azure. Ich habe einen benutzerdefinierten Login-Controller erstellt, der JWTs nach erfolgreicher Anmeldung ausgibt, aber die generierten JWTs scheinen ungültig zu sein (die Signatur kann auf jwt.io nicht validiert werden (mithilfe des Signaturschlüssels von Kudu) und der Server weist die Token bei Verwendung als ungültig zurück authentifizieren). Die serverseitigen Code ist unten:Anmeldung bei Azure Mobile Services JWt ungültig

public TenantAuthController() 
{ 
    _serviceContext = new MobileServiceContext(); 
    _signingKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY"); 
    var website = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME"); 
    _audience = $"https://{website}/"; 
    _issuer = $"https://{website}/"; 
} 

[HttpPost] 
public IHttpActionResult Post([FromBody] TenantLoginRequest request) 
{ 
    if (string.IsNullOrEmpty(request.TenantName) || string.IsNullOrEmpty(request.Password)) return BadRequest(); 
    (var valid, var tenant) = ValidateAuthRequest(request); 
    if (!valid) return Unauthorized(); 

    var claims = new[] 
    { 
     new Claim(JwtRegisteredClaimNames.Sub, $"{tenant.Id}") 
    }; 

    var token = AppServiceLoginHandler.CreateToken(claims, _signingKey, _audience, _issuer, TimeSpan.FromDays(365)); // TODO Token refresh 

    return Ok(
     new TenantLoginResponse 
     { 
     Tenant = tenant, 
     Token = token.RawData, 
     } 
    ); 
} 

I-Authentifizierung auf dem Azure App-Dienst aktiviert haben, und ich habe durch Remote-Debugging bestätigt, dass der Signaturschlüssel korrekt ist. Gibt es irgendetwas, was ich falsch in meinem Controller oder Konfiguration mache, würde das JWT ungültig sein?

Antwort

0

Wenn das Token JWT.IO nicht analysiert, ist es ungültig. Anscheinend versuchen Sie, einen Wert zu verschlüsseln, der nicht das Bearer-Token ist. Aus Ihrem Code scheint es, als würden Sie Ihre "Mandanten-ID" verschlüsseln. Der Mandant ist wie der Subskriptionsname in azurblau und bezieht sich nicht auf das Token.

Was ist in AppServiceLoginHandler.CreateToken()? Ist das benutzerdefinierter Code oder MSFT-Code? Anscheinend stammt das Problem von ...

+0

AppServiceLoginHandler.CreateToken() ist eine von Microsoft bereitgestellte Funktion in der Authentifizierungsbibliothek von Azure Mobile Services. – GregoryComer

+0

Die Mandanten-ID ist auch ein benutzerspezifischer Wert, der für die Authentifizierung verwendet wird. Soweit mir bekannt ist, kann ich den Gegenstandsanspruch auf einen anwendungsspezifischen Wert setzen, richtig? Es wird verwendet, um den authentifizierten Mandanten für den JWT zu verfolgen. CreateToken() gibt ein JwtSecurityToken zurück, das die gesamte Verschlüsselung verarbeitet. – GregoryComer

Verwandte Themen