在尝试检索单点登录密钥以首次更新(创建)它时,我从 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 交谈后,发现问题的解决方案如下:
- 如果您执行 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。 如果您确定已启用 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>
从现在开始,您应该能够成功地发出 GET 请求
https://apps-apis.google.com/a/feeds/domain/2.0/{domainName}/sso/signingkey
并收到有效的响应。未来的更新将需要利用此 GET 响应,因为它包含正确的id
参数。