2017-09-07 2 views
0

Je développe une application iOS qui nécessite que les utilisateurs s'authentifient sur une Azure AD (non B2C), puis utilisent le jeton JWT pour appeler un WebAPI.Réclamation d'audience incorrecte à l'aide d'AppAuth pour iOS et Azure AD

J'utilise la bibliothèque AppAuth:

OIDAuthorizationService.discoverConfiguration(forDiscoveryURL: url) { configuration, error in 
    ... 
} 

Et puis

let request = OIDAuthorizationRequest(configuration: configuration, clientId:<NativeApp AppID>, scopes: [OIDScopeOpenID], redirectURL: redirectURL, responseType: OIDResponseTypeCode, additionalParameters: ["resource": "<WebAPI AppID>"]) 
OIDAuthState.authState(byPresenting: request, presenting: presentingViewController) { state, error in 
    ... 
} 

Mais le problème est, ma demande d'audience de JWT jeton a le AppID de mon client, et non la APPID WebAPI, même si je transmets le paramètre de ressource avec le WebAPI AppID. Par conséquent, mon WebAPI rejette le jeton JWT car la revendication d'audience est incorrecte.

Que dois-je faire pour que l'audience de mon jeton JWT soit l'AppID de WebAPI?

+0

Pouvez-vous vérifier vos traces HTTP pour vous assurer que la charge utile envoyée pour récupérer le jeton est correcte? –

+0

Il semble que ce soit, parce que si je mets dans une ressource AppID invalide, alors je reçois une erreur disant que l'application est introuvable. –

+0

Une analyse plus poussée montre que lorsque le point de terminaison/authorize est appelé, le paramètre de ressource est passé, mais lorsque le point de terminaison/token est appelé, ce n'est pas le cas. Donc la question est, comment pouvez-vous faire cela dans AppAuth? –

Répondre

0

Lorsque vous demandez l'accès à une autre ressource, Azure AD vous renvoie un jeton d'identification et un jeton d'accès. J'utilisais le jeton d'identification, qui correspond toujours à la réclamation d'audience de votre client. L'utilisation du jeton d'accès (qui est également un jeton JWT) a la revendication d'audience correcte pour la ressource à laquelle vous demandez l'accès.

+0

Je reçois "" Erreur d'échange de jeton: L'opération n'a pas pu être terminée. Erreur OAuth: invalid_grant ", avez-vous rencontré un problème similaire? – Jan