2017-10-20 25 views
0

J'utilise la bibliothèque Azure Mobile Services et tente de créer un fournisseur d'identité personnalisé. Je cours le serveur dans Azure. J'ai créé un contrôleur de connexion personnalisé qui émet des JWT après une connexion réussie, mais les JWT générés ne sont pas valides (la signature ne valide pas sur jwt.io (en utilisant la clé de signature de Kudu) et le serveur rejette les jetons comme non valides authentifier). Le code côté serveur est ci-dessous:Connexion de services mobiles Azure Jwt Invalide

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, 
     } 
    ); 
} 

Je authentification activée sur le service App Azure et je l'ai confirmé par le débogage à distance que la clé de signature est correcte. Y a-t-il quelque chose que je fasse de mal dans mon contrôleur ou ma configuration qui rendrait le jwt invalide?

Répondre

0

Si le jeton n'est pas analysé sur JWT.IO, il n'est pas valide. Il semble que vous essayez de chiffrer une valeur qui n'est pas le jeton de support. De votre code, il semble que vous essayez de crypter votre "ID de client". Le locataire est comme le nom de l'abonnement dans Azur, et n'est pas lié au jeton.

Que contient AppServiceLoginHandler.CreateToken()? Est-ce un code personnalisé ou un code MSFT? Il semble que c'est de là que vient votre problème ...

+0

AppServiceLoginHandler.CreateToken() est une fonction fournie par Microsoft dans la bibliothèque d'authentification Azure Mobile Services. – GregoryComer

+0

En outre, l'ID de client hébergé est une valeur spécifique à l'utilisateur utilisée pour l'authentification. Pour autant que je sache, je peux définir la valeur de la revendication du sujet à une valeur spécifique à l'application, correct? Il est utilisé pour suivre le locataire authentifié pour le jwt. CreateToken() renvoie un JwtSecurityToken, qui gère tout le chiffrement. – GregoryComer