好的,所以我们正在构建一个iPhone应用程序来访问Office 365上托管的Sharepoint 2013网站.如果我在C#中构建这个,我已经完成了,我会很高兴只使用TokenHelper.cs来获取我大部分时间都在那里.不幸的是,据我所知,Objective-C还没有TokenHelper.
所以这是交易,我们已经可以成功获得OAuth身份验证/授权页面,我们成功获得了授权码.
在此之后我们感到难过,因为我们知道我们在POST中缺少了用于获取Access和Refresh令牌的域ID.我终于想出了TokenHelper是如何做到的,我们已经重复了这一点.(这是对/_vti_bin/client.svc的额外调用,您希望获得401,以便您可以从标头中提取领域ID)
我们现在有一个领域ID,从我在文档中看到的和TokenHelper以及在Fiddler中看到的,需要在以下两种方式中使用:在POST的URL构造内以及在文档中的资源值.该POST的标题.
所以POST网址看起来像这样:
accounts.accesscontrol.windows.net/{realm id}/tokens/oauth/2
我们的资源价值如下:
resource = 00000003-0000-0ff1-ce00-000000000000%2f {realm url}%40 {realm 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