如何从授权的Web API向Partner Center发出API调用?

时间:2017-09-06 09:50:22

标签: asp.net-web-api azure-active-directory msal

我们正在创建第三方应用程序以访问合作伙伴中心API。

我们使用JSOM架构注册了一个SharePoint站点作为第三方应用程序,我们使用MSAL库进行登录。在使用accessToken之后,我们调用一个用于安全访问数据库中数据的WebAPI。现在,我们需要访问合作伙伴中心API以获取合作伙伴详根据提供给我们的文档,我们有以下代码:

var clientcred = new ClientCredential(clientId, appKey);
var authContext = new AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}/", tenantID), tokenCache);
var result = await authContext.AcquireTokenAsync("https://api.partnercenter.microsoft.com", clientcred, new UserAssertion(idToken));
var pcAccessToken = result.AccessToken;

我们是否应该在从ajax调用获得的web api上使用相同的id令牌。或者我们是否必须刷新访问令牌。如果是,如何在Web API上执行此操作?

另外,我们如何在WebAPI上生成tokenCache?

1 个答案:

答案 0 :(得分:0)

根据说明,您似乎正在访问受Azure AD保护的Web API。并且您希望访问Web API中的合作伙伴中心API。

您使用MSAL(Azure AD V2.0端点)将Web API与第三方应用程序集成在一起。但是,AFAIK Azure AD V2.0不支持类似的Partner Perter API(请参阅Restrictions on services and APIs)。

如果合作伙伴中心API能够通过使用client credentials flow获取令牌来访问,那么您可以使用此流程获取Web API中的令牌并调用合作伙伴中心API。

另一种方式是使用代表流。以下是此流程的进展, 第三方应用程序获取access_token以调用Web API。然后,网络API使用on-behalf-flow获取合作伙伴中心API的令牌,并使用新令牌调用合作伙伴中心API。此解决方案使用Azure AD端点而不是v2.0(在Azure门户上注册应用程序)。并且它无法使用MSAL登录,因为此库适用于Azure AD V2.0端点。我们可以使用azure-activedirectory-library-for-js登录Azure AD端点。