小编Cam*_*ion的帖子

为SharePoint Online O365构建多租户应用程序

我正在尝试为Office 365构建一个多租户应用程序,该应用程序专注于SharePoint Online并使用OAuth2通过Azure进行身份验证.此问题特定于通过Azure登录进行SharePoint访问,但仅在使用此API使用OAuth2进行身份验证时才会发现.

正确注册应用程序并在Azure和Office中设置用户的许多机制虽然有些复杂,但却能够充分利用时间投资.

即使Azure的基本OAuth2协议使用也相对顺利.但是,凭借SharePoint的"资源"参数,我无法使我的应用程序成为真正的多租户.这显然要求我的应用程序在完成登录序列之前知道最终用户的根SharePoint站点URL.我看不出这是怎么可能的.有人请指出我正确的方向.

以下是实际登录顺序的示例:

GET /common/oauth2/authorize?client_id=5cb5e93b-57f5-4e09-97c5-e0d20661c59a
&redirect_uri=https://myappdomain.com/v1/oauth2_redirect/
&response_type=code&prompt=login&state=D79E5777 HTTP/1.1
Host: login.windows.net
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)

当用户进行身份验证时,这会导致调用重定向,如下所示:

https://myappdomain.com/v1/oauth2_redirect/?code=AAABAAAAvPM1KaPlrEq...{blah*3} 
Run Code Online (Sandbox Code Playgroud)

到目前为止很棒!3-legged身份验证的下一步是POST返回/ token端点,以获取要在所有后续REST调用中使用的实际Bearer令牌.这只是经典的OAuth2 ......

POST /common/oauth2/token HTTP/1.1
Host: login.windows.net
Accept: text/json
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="grant_type"

authorization_code
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="code"

AAABAAAAvPM1KaPlrEq...{blah*3}
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="client_id"

5cb5e93b-57f5-4e09-97c5-e0d20661c59a
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="client_secret"

02{my little secret}I=
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="redirect_uri"

https://myappdomain.com/v1/oauth2_redirect/
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="resource"

https://contoso.sharepoint.com/
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Run Code Online (Sandbox Code Playgroud)

而且这里变得粘稠."resource"参数是必需的,并且必须指向您要访问的特定于用户的端点.对于Exchange或Azure,端点始终相同.(https://graph.windows.nethttps://outlook.office365.com)但SharePoint对每个租赁都有不同的端点.您尚未实际登录该用户,但您已经需要有关您尚未拥有的用户的信息.

如果我部署的应用程序版本假设"contoso"作为租户名称(如上所述),那么只有contoso租户中的用户才能成功使用我的应用程序读取SharePoint数据.一旦fabrikam中的另一个用户尝试使用它,我POST/token端点就会要求获得错误站点的许可......而且还有问题.

我怎样才能检测到正确的端点POST/token先于实际登录用户端点?是否有一些我可以使用的隐藏信息给我?是否有某种发现可以检测租户的根SharePoint URL?或者更好的是,是否有一个端点,我可以作为可以代表租户家的资源(类似的东西 …

sharepoint azure multi-tenant oauth-2.0 office365

7
推荐指数
1
解决办法
1927
查看次数

标签 统计

azure ×1

multi-tenant ×1

oauth-2.0 ×1

office365 ×1

sharepoint ×1