2016-09-21 68 views
0

我有一个场景,我认为应该相当简单,但我没有找到解决方案,并想知道是否有人可以指出我在正确的方向。从sharepoint页面调用办公室365认证的web api javascript

的设置:

1)的SharePoint在线网站(用户必须经过身份验证才能看到页)

2).NET MVC的Web API服务端点(用户必须进行身份验证,以获得从数据服务)

这两者都使用相同的Azure Active Directory进行身份验证。 Web API已在Azure AD中注册。

问题:

我想提出一些JavaScript在SharePoint Online网页上(不是SharePoint插件,不是AngularJS SPA),将使用进行AJAX调用的Web API登录用户的凭据没有任何类型的用户提示(因为这是一个Ajax调用,用户将无法看到提示)。

我试过寻找ADAL库,但我可以找到的所有JavaScript的都需要使用Angular,并要求用户第二次进行身份验证。我发现了一些使用OAuth 2.0的文档,但是(根据我的说法),您需要让客户授权Sharepoint Online页面以他们的名义行事 - 用户不会同意,因为它是AJAX呼叫和同意页面不会显示在浏览器中(尽管Azure AD中的管理员已经批准了该应用程序,但它仍在执行此操作)。

在我看来,用户不应该离开SharePoint页面,不应该再次输入他们的凭证。我相信应该有某种方式可以登录SharePoint Online,并将其用作我们内部应用程序的登录。

如果有人能指出我正确的方向,我会非常感激。提前致谢。

回答

1

通常,如果我们调用受Azure AD保护的资源,则需要通过OAuth 2.0对应用程序进行授权。

您是否可以在SharePoint在线页面中放置隐藏的iframe?如果可能的话,那么我们可以使用Azure AD隐式流通过iframe获取令牌,并且我们可以通过iframe的令牌返回来调用由Azure AD保护的REST。要启用隐式流,我们需要从Azure门户下载应用程序清单并将“oauth2AllowImplicitFlow”切换为true

如果您只是开发一个不需要用户同意该应用程序的单一租户。下面是HTML代码的请求从的Iframe标记,供您参考:

<iframe width="0" height="0" id="oauthHideIframe" src="https://login.microsoftonline.com/{tenantId}/oauth2/authorize?response_type=token&client_id={Client_Id}&redirect_uri={redirect_Url}&resource={your web api app url register on the protal}"> </iframe> 

,并从IFRAME传递令牌的父窗口,我们可以使用window.postmessage这让绍兴德胜,一部开拓创新的通信。