0

在尝试检索单点登录密钥以首次更新(创建)它时,我从 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-on_signing_key

我知道我的 Auth 令牌标头设置正确,因为它们适用于其他端点。

有任何想法吗?

更新(和解决方案)

在以下答案的评论部分与 Jay 交谈后,发现问题的解决方案如下:

  1. 如果您执行 GET 请求https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey并收到带有InvalidSsoSigningKey错误的 XML 响应,请首先确保您已通过https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/general端点启用 SSO。
  2. 如果您确定已启用 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>
    
  3. 从现在开始,您应该能够成功地发出 GET 请求https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey并收到有效的响应。未来的更新将需要利用此 GET 响应,因为它包含正确的id参数。

4

1 回答 1

2

我在 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

于 2012-12-17T21:08:54.840 回答