2017-10-19 11 views
1

Je suis complètement perdu, toute aide serait appréciée.Sur site ADFS 3.0 OAuth2 WebApi + AngularJS

Lorsque je clique sur Login par mon application client à partir AngularJS, je me redirigent vers:

https://adfs.dev5.local/adfs/oauth2/authorize?response_type=code&client_id=09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc&resource=urn%3Awebapi%3Atest&redirect_uri=https%3A%2F%2Flocalhost%3A44326%2F&state=52e4aa10-f082-4ee6-8823-543ec6e4dce4&client-request-id=e2751f34-f7db-41f4-8c1d-4463e2dca48b&x-client-SKU=Js&x-client-Ver=1.0.15&nonce=93039780-99f6-4efc-8b1b-58aa92df9f82 

Ce qui est bien et tout, je suis en mesure d'entrer dans mon email + mot de passe. Une fois que je me connecte je reçois une redirection vers:

https://localhost:44326/?code=OLCE2LJVeU2Zy2-7Q4oIMg.6Pr0vZgW1QhBAMQoUlgIKAdAsno.q4scWy_ZFQHQEz08M3gU3KJU4NhXdimZiMpgSGBQ8xKN8BLK0Qoe1m1cK5TA2WLLyA14SlnnfA4yHEp5_pTWrIOYNrvOVzNiGU0Zkie-7ae2D1_3U1E1rTmLUTprIadU4gLmo2CeMHkM8gumS285wKsRsMpXVLcavjgjyRM3XoWXSDSP96_eeMgq1osQ1M5170rrGOh_DVqKG-xYnKk5PEC7cWikaR_pxCvwvayLMV0VQIIyq1GJ3CvgK8sWFJGdY3jz247Bh8RPH9-t2_Jz3_7wyqvfvfquAY8tQxElEN1IEoPMOwVdjfBgNlZlw7vtAo79jdH1C_TRNUC5T3IrXw&state=52e4aa10-f082-4ee6-8823-543ec6e4dce4&client-request-id=e2751f34-f7db-41f4-8c1d-4463e2dca48b 

C'est là où je suis confus, je ne pense pas que ça suppose de me rediriger que ..., je sais que je dois à ce poste un peu comment obtenir le jeton, mais comment? J'utilise Postman et j'ai pu obtenir le jeton d'accès, mais ce que je ne comprends pas, c'est comment mon WebAPI traduit-il cela pour accéder au token? J'utilise ADFS 3.0 sur Windows Server 2012 R2.

Configuration ADFS:

Add-ADFSRelyingPartyTrust -Name MyWebAPI -Identifier urn:webapi:test -IssuanceAuthorizationRules '=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");' -IssuanceTransformRules 'c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] => issue(claim = c);' 

Ajouter Client:

Add-ADFSClient -Name "client" -ClientId "09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc" -RedirectUri "https://localhost:44326/" 

Startup.Auth.cs:

app.UseActiveDirectoryFederationServicesBearerAuthentication(
    new ActiveDirectoryFederationServicesBearerAuthenticationOptions 
    { 
     MetadataEndpoint = "https://adfs.dev5.local/FederationMetadata/2007-06/federationmetadata.xml", 
     TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters 
     { 
      ValidAudience = ConfigurationManager.AppSettings["ida:Audience"], 
     } 
    }); 

webconfig pour le public:

<appSettings> 
    <add key="ida:Audience" value="https://localhost:44326/" /> 
</appSettings> 

AngularJS configuration Adal:

adalProvider.init(
    { 
     instance: 'https://adfs.dev5.local/', 
     tenant: 'adfs', 
     clientId: '09c9a8a2-6bf1-427d-89ba-45c2c02bb9fc', 
     redirectUri: 'https://localhost:44326/' 
     //cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost. 
    }, 
    $httpProvider 
); 

Répondre

1

Jetez un oeil à ces Postman samples.

Vous verrez que j'ai fait chaque flux mais pour ADFS 4.0 qui a la pile OpenID Connect/OAuth complète.

ADFS 3.0 dispose uniquement d'auth. attribution de code pour les clients confidentiels. Une fois que vous avez le code pour le point de terminaison d'autorisation, vous devez l'envoyer au point de terminaison de jeton pour obtenir le jeton réel.

Il existe un bon exemple here.

Sachez également que les clients js utilisent normalement le flux implicite.

+0

Merci, vous m'a conduit à une solution, en ce qui concerne que ADFS 3.0 ne accorde que du code. Il m'a fallu des jours de débogage + essais et erreurs, a finalement été en mesure de parvenir à une solution, il va travailler pour moi. L'idée est d'utiliser Identity Server, avec lequel j'ai pu utiliser ADFS 3 en tant que connexion externe et Identity Server pour OAuth. – 12seconds