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

时间:2013-12-19 14:14:48

标签: objective-c sharepoint oauth-2.0 sharepoint-2013 acs

好的,我们正在构建一个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并取得了成功?

我也可以发布代码,但我最初还是试图回避这个问题。

1 个答案:

答案 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