当我第一次尝试检索Single Sign-On密钥以更新(创建)它时,从Google Apps管理设置API收到一个有趣的错误。我们只想通过API来实现这一点,但API似乎在假设签名密钥已经在客户端创建。以下GET请求失败,错误如下:
GET https://apps-apis.google.com/a/feeds/domain/2.0/ruby-alphaz.co/sso/signingkey
响应错误如下:
SimpleXMLElement Object
(
[error] => SimpleXMLElement Object
(
[@attributes] => Array
(
[errorCode] => 1408
[invalidInput] =>
[reason] => InvalidSsoSigningKey
)
)
)
我可以毫无问题地更新"单一登录"设置,但签名密钥终结点导致了问题。需要明确的是,该域目前不存在签名密钥,但域指令是尝试通过端点检索XML,以确保它设置了正确的id参数,这样我就可以后续进行PUT响应以创建/更新签名密钥。
我下面的文档如下:
https://developers.google.com/google-apps/admin-settings/#retrieving_the_single_sign-_签名_密钥
我知道我的Auth令牌头在为其他端点工作时设置正确。
有什么想法吗?
更新(和解决方案)
在下面答案的评论部分与周交谈后,发现问题的解决方案如下:
- 如果对
https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey
执行GET请求并收到带有InvalidSsoSigningKey
错误的XML响应,请首先确保已通过https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/general
端点启用SSO 如果您确信已启用SSO,但仍收到
InvalidSsoSigningKey
错误,则可能是因为您尚未上载签名密钥。虽然没有现成的文档,但您可以使用以下格式向https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey
执行PUT请求以创建签名密钥:<?xml version="1.0" encoding="UTF-8"?> <atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006"> <apps:property name="signingKey" value="[YOUR_BASE64_ENCODED_CERTIFICATE_VALUE]" /> </atom:entry>
从现在起,您应该能够成功地向
https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey
发出GET请求并接收有效的响应。未来的更新将需要使用此GET响应,因为它包含正确的id
参数。
我早在2009年就提出了一个问题,请随意加入:
http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=1527
您需要启用SSO才能检索密钥。
是的,这意味着在启用SSO之前无法正确检查密钥匹配。
在执行PUT之前,您不需要执行GET。只需手动创建XML即可。看看GAM是如何做到的:
http://code.google.com/p/google-apps-manager/source/browse/trunk/gdata/apps/adminsettings/service.py#363