从sharepoint页面javascript调用office 365认证web api

Call an office 365 authenticated web api from a sharepoint page javascript

本文关键字:认证 web api office 调用 sharepoint 页面 javascript      更新时间:2023-09-26

我有一个场景,我认为应该是相当简单的,但我没有找到一个解决方案,不知道是否有人可以指给我正确的方向。

设置:

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

2) .NET MVC Web API服务端点(用户必须经过身份验证才能从服务获取数据)

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

问题:

我想在SharePoint Online页面(不是SharePoint Add-in,不是AngularJS SPA)上放一些javascript,它将使用登录用户的凭据对Web API进行AJAX调用,而不需要任何类型的用户提示(因为这是AJAX调用,用户无论如何都不会看到提示)。

我试着查看ADAL库,但我能找到的所有JavaScript库都需要使用Angular,并要求用户进行第二次身份验证。我发现了一些使用OAuth 2.0的文档,但是(据我所知)需要你让客户端授权Sharepoint Online页面代表他们行事-用户将无法同意,因为这是一个AJAX调用,并且同意页面不会显示在浏览器中(尽管应用程序已经被Azure AD的管理员批准,但它仍然这样做)。

在我看来,用户不应该离开SharePoint页面,也不应该再次输入他们的凭据。我认为应该有某种方式,SharePoint Online的登录也可以作为我们内部应用程序的登录。

如果有人能给我指个正确的方向,我会很感激的。

通常,如果我们调用受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传递到父窗口,我们可以使用窗口。postmessage允许跨原始通信。