Objective-C中的Sharepoint 365 ACS OAuth:realm错误-需要帮助



好的,我们正在构建一个iPhone应用程序,以访问Office 365上托管的Sharepoint 2013网站。如果我在C#中构建这个,我已经完成了,我可以奢侈地使用TokenHelper.cs来实现大部分功能。不幸的是,据我所知,Objective-C还没有TokenHelper。

因此,我们已经可以成功地打开OAuth身份验证/授权页面,并成功地取回授权代码。

在这一点之后,我们有点困惑,因为我们知道我们在POST中丢失了用于获取访问和刷新令牌的领域id。我终于弄清楚了TokenHelper是如何做到这一点的,我们已经复制了这一点。(这是对/\vti_bin/client.svc的额外调用,您希望在其中获得401,这样您就可以从标头中提取领域id)

根据我在文档和TokenHelper中阅读到的内容,以及在Fiddler中看到的内容,我们现在有了一个领域id,需要通过以下两种方式使用:在POST的URL构造中,以及在POST的标头中的资源值中。

所以POST url看起来是这样的:

accounts.accesscontrol.windows.net/{realm id}/tokens/oauth/2

我们的资源价值如下:

资源=0000000 3-0000-0ff1-ce00-000000000000%2f{领域url}%40{领域id}

这至少连接良好并接受我们的POST。不幸的是,我们收到了以下消息:

ACS50012:身份验证失败。ACS90011:领域"不是当前服务命名空间的已配置领域。

这条消息让我认为可能存在配置问题,但我真的不能确定。

是否有其他人在Objective-C中尝试过对365站点执行OAuth并取得了成功?

我也可以发布代码,但一开始我试图回避这一点。

我最近遇到了同样的问题,感觉可能是你看到的同一个问题。

OAuth的正确POST请求如下:

POST https://accounts.accesscontrol.windows.net/<REALM_GUID>/tokens/OAuth/2
x-www-form-urlencoded params:
grant_type:authorization_code
client_id:<CLIENT_ID>@<REALM_GUID>
client_secret:<CLIENT_SECRET>
code:<AUTH_CODE>
redirect_uri:<REDIRECT_URI>
resource:00000003-0000-0ff1-ce00-000000000000/<SHAREPOINT_AUTHORITY>@<REALM_GUID>

对我来说,主要的问题是"client_id"的值需要将领域id附加到客户端id。不包括领域id将抛出"ACS90011:领域"不是当前服务命名空间的配置领域。">

HTH-

最新更新