2017-06-14 3 views
1

Nous avons un site de publication SharePoint avec un accès anonyme hébergé sur Internet. Conformément aux dernières exigences, nous devons implémenter une connexion utilisateur (AzureAD, comptes personnels et de travail Microsoft, etc.).Requête Azure Active Directory v2.0 pour l'intégration de l'API Web sur un site SharePoint

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-flows

Selon la documentation ici, nous voulons mettre en œuvre cette utilisation de l'API Web pour obtenir les informations de la base de données sécurisée. Nous envisageons d'utiliser le fichier MSAL.js pour la connexion et la déconnexion de l'utilisateur sur SharePoint et après avoir obtenu un jeton de support, nous pouvons appeler l'API Web pour les données supplémentaires de notre base de données.

Restriction des API Web autonomes: «Vous pouvez utiliser le point de terminaison v2.0 pour créer une API Web sécurisée avec OAuth 2.0. Toutefois, cette API Web peut recevoir des jetons uniquement à partir d'une application ayant le même ID d'application. Vous ne pouvez pas accéder à une API Web à partir d'un client ayant un ID d'application différent. Le client ne pourra pas demander ou obtenir des autorisations pour votre API Web. "

Comment pouvons-nous créer deux applications avec le même ID d'application à App Registration Portal? Ou devrions-nous utiliser le même identifiant d'application à la fin de SharePoint et de l'API Web?

Répondre

0

Il n'est pas nécessaire d'enregistrer deux applications, vous avez seulement besoin d'une application de registre. Une fois que vous enregistrez l'application, vous pouvez utiliser la bibliothèque MSAL ci-dessous pour obtenir le jeton pour appeler l'API Web:

<script class="pre"> 
    var userAgentApplication = new Msal.UserAgentApplication("e5e5f2d3-4f6a-461d-b515-efd11d50c338", null, function (errorDes, token, error, tokenType) { 
     // this callback is called after loginRedirect OR acquireTokenRedirect (not used for loginPopup/aquireTokenPopup) 
    }) 
    userAgentApplication.loginPopup(["user.read"]).then(function (token) { 
     var user = userAgentApplication.getUser(); 
     console.log(token); 
     // signin successful 
    }, function (error) { 
     // handle error 
    }); 
</script> 

Et pour protéger l'API Web, vous pouvez utiliser la même application et consulter le code ci-dessous:

public void ConfigureAuth(IAppBuilder app) 
{ 
    var tvps = new TokenValidationParameters 
    { 
     // The web app and the service are sharing the same clientId 
     ValidAudience = "e5e5f2d3-4f6a-461d-b515-efd11d50c338", 
     ValidateIssuer = false, 
    }; 

    // NOTE: The usual WindowsAzureActiveDirectoryBearerAuthenticaitonMiddleware uses a 
    // metadata endpoint which is not supported by the v2.0 endpoint. Instead, this 
    // OpenIdConenctCachingSecurityTokenProvider can be used to fetch & use the OpenIdConnect 
    // metadata document. 

    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
    { 
     AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration")), 
    }); 
}