Office 365 'app only' 令牌请求失败并出现 'invalid signature' 错误
Office 365 'app only' token request fails with 'invalid signature' error
我正在尝试执行 'client credential' 流程并获取 Office 365 的访问令牌 app.I 按照以下步骤操作。
第 1 步:我按照以下文档在 Azure AD 上注册了应用程序
http://blogs.msdn.com/b/exchangedev/archive/2015/01/21/building-demon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow.aspx?CommentPosted=true#commentmessage
step2:为我的应用程序配置 X.509 public 证书。下载清单文件并更新 'KeyCredentials' 值并再次上传清单(遵循步骤 1 文档)。
"keyCredentials": [
{
"customKeyIdentifier": "BB/OLYBBivt4RXUKxQbk+c9UEmo=",
"endDate": "2016-12-15T07:00:00Z",
"keyId": "6837d367-660c-4d44-b0ea-9dcd538828e5",
"startDate": "2014-12-15T07:00:00Z",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": null
}
第三步:
按照中的步骤操作
生成如下 'client assertion'。
base64(header).base64(payload).base64(siganature)
header如下:
{
"alg": "RS256",
"x5t": "BB/OLYBBivt4RXUKxQbk+c9UEmo=" //same as customKeyIdentifier
}
有效载荷为:
{
"aud": "https://login.windows.net/<tenantid>/oauth2/token",
"exp": "now + 1 hour",
"nbf": "now",
"iss": "CLIENT ID",
"jti": "SOME GUID",
"sub": "CLIENT ID"
}
对于签名(RSA-SHA-256算法),我使用openssl如下图
openssl dgst -sha256 -sign privatekey.pem < input.txt > signature
注意:input.txt 包含 base64(header).base64(payload)
第四步:
当我请求获取访问令牌时,我收到了 'invalid signature' 错误,如下所示
{
"error": "invalid_client",
"error_description": "AADSTS70002: Error validating credentials. AADSTS50012: Client assertion contains an invalid signature.\r\nTrace ID: 880b11db-0935-4cbd-836e-4d4d91b2a9e2\r\nCorrelation ID: e72ae39a-9868-4efe-847e-890ef32d48ae\r\nTimestamp: 2015-03-12 18:45:54Z",
"error_codes": [
70002,
50012
],
"timestamp": "2015-03-12 18:45:54Z",
"trace_id": "880b11db-0935-4cbd-836e-4d4d91b2a9e2",
"correlation_id": "e72ae39a-9868-4efe-847e-890ef32d48ae",
"submit_url": null,
"context": null
}
我在 RSA SHA256 签名中做错了什么?
如有任何帮助,我们将不胜感激。
注意:我什至在python中使用'PyJWT',在nodejs中使用'jsonwebtoken'来生成客户端断言(JWT令牌)并将其用于令牌请求,我得到了同样的错误.
当您下载清单时,它总是为 value
键发送空值。这并不表示有问题。确保您正在执行 RSA SHA-256 签名。参见
我正在尝试执行 'client credential' 流程并获取 Office 365 的访问令牌 app.I 按照以下步骤操作。
第 1 步:我按照以下文档在 Azure AD 上注册了应用程序 http://blogs.msdn.com/b/exchangedev/archive/2015/01/21/building-demon-or-service-apps-with-office-365-mail-calendar-and-contacts-apis-oauth2-client-credential-flow.aspx?CommentPosted=true#commentmessage
step2:为我的应用程序配置 X.509 public 证书。下载清单文件并更新 'KeyCredentials' 值并再次上传清单(遵循步骤 1 文档)。
"keyCredentials": [
{
"customKeyIdentifier": "BB/OLYBBivt4RXUKxQbk+c9UEmo=",
"endDate": "2016-12-15T07:00:00Z",
"keyId": "6837d367-660c-4d44-b0ea-9dcd538828e5",
"startDate": "2014-12-15T07:00:00Z",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": null
}
第三步:
按照中的步骤操作
base64(header).base64(payload).base64(siganature)
header如下:
{
"alg": "RS256",
"x5t": "BB/OLYBBivt4RXUKxQbk+c9UEmo=" //same as customKeyIdentifier
}
有效载荷为:
{
"aud": "https://login.windows.net/<tenantid>/oauth2/token",
"exp": "now + 1 hour",
"nbf": "now",
"iss": "CLIENT ID",
"jti": "SOME GUID",
"sub": "CLIENT ID"
}
对于签名(RSA-SHA-256算法),我使用openssl如下图
openssl dgst -sha256 -sign privatekey.pem < input.txt > signature
注意:input.txt 包含 base64(header).base64(payload)
第四步: 当我请求获取访问令牌时,我收到了 'invalid signature' 错误,如下所示
{
"error": "invalid_client",
"error_description": "AADSTS70002: Error validating credentials. AADSTS50012: Client assertion contains an invalid signature.\r\nTrace ID: 880b11db-0935-4cbd-836e-4d4d91b2a9e2\r\nCorrelation ID: e72ae39a-9868-4efe-847e-890ef32d48ae\r\nTimestamp: 2015-03-12 18:45:54Z",
"error_codes": [
70002,
50012
],
"timestamp": "2015-03-12 18:45:54Z",
"trace_id": "880b11db-0935-4cbd-836e-4d4d91b2a9e2",
"correlation_id": "e72ae39a-9868-4efe-847e-890ef32d48ae",
"submit_url": null,
"context": null
}
我在 RSA SHA256 签名中做错了什么?
如有任何帮助,我们将不胜感激。
注意:我什至在python中使用'PyJWT',在nodejs中使用'jsonwebtoken'来生成客户端断言(JWT令牌)并将其用于令牌请求,我得到了同样的错误.
当您下载清单时,它总是为 value
键发送空值。这并不表示有问题。确保您正在执行 RSA SHA-256 签名。参见