好的,我们正在构建一个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并取得了成功?
我也可以发布代码,但我最初还是试图回避这个问题。
答案 0 :(得分:5)
我最近遇到了同样的问题,并且感觉它可能与您所看到的问题相同。
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>
对我而言,主要的问题是&#34; client_id&#34;需要将realm id附加到客户端ID。不包括领域ID会引发&#34; ACS90011:领域&#39;&#39;不是当前服务命名空间的已配置域。&#34;
HTH