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?
AppServiceLoginHandler.CreateToken() ist eine von Microsoft bereitgestellte Funktion in der Authentifizierungsbibliothek von Azure Mobile Services. – GregoryComer
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