Microsoft Graph REST API无效客户端密钥

时间:2016-12-14 01:55:12

标签: azure curl office365api microsoft-graph azure-ad-graph-api

我需要进行以下POST调用。但是,即使我提供了正确的客户端ID和密码ID,我的电话也会被拒绝。

    curl POST https://login.microsoftonline.com/f02....e3/oauth2/token
 -H 'Content-Type: application/x-www-form-urlencoded'  --data 'grant_type=authorization_code&redirect_uri=https://requestb.in/ac&
source=https://graph.microsoft.com&client_id=1e1....-913d9
&client_secret=YmbSFYz.....4Uk=&scope=mail.read&code=AaAAA........on0a569'

这是我收到的错误:

    curl: (6) Could not resolve host: POST
    {"error":"invalid_client","error_description":"AADSTS70002: 
Error validating credentials. AADSTS50012: Invalid client secret is
 provided.\r\nTrace ID: 78d...a2b\r\nCorrelation ID: 
01....ab2\r\nTimestamp: 2016-12-14 01:46:47Z","error_codes":[70002,50012],"timestamp":"2016-12-14 01:46:47Z","trace_id":"78d....a2b","correlation_id":"018.....ab2"}

我该如何解决这个问题?

编辑:我正试图在this documentation

中实现第二部分(即获取令牌)

6 个答案:

答案 0 :(得分:5)

您提供的帖子是利用AAD V2端点。但根据您的代码段,您使用的是V1端点https://login.microsoftonline.com/f02....e3/oauth2/token。对于通过V1端点获取访问令牌,您可以参考https://graph.microsoft.io/en-us/docs/authorization/app_authorization了解更多详细信息。

对于V2授权端点,您可以查看您正在使用的端点:

GET https://login.microsoftonline.com/common/oauth2/v2.0/authorize?...

POST https://login.microsoftonline.com/common/oauth2/v2.0/token

此外,它还需要v2.0广告应用程序:

  

本文假设v2.0注册,因此您将在Application Registration Portal上注册您的应用。

答案 1 :(得分:4)

这是由于client_secret。它可能包含特殊字符。

encodeURIComponent()函数对URI组件进行编码。 此功能对特殊字符进行编码。另外,它编码以下字符:,/? :@& = + $#

使用以下内容:

encodeURIComponent(client_secret);

答案 2 :(得分:1)

我正在使用npm包:

Microsoft Azure Active Directory Passport.js Plug-In

使用v1特定于租户的端点。

成功登录Microsoft后,我最初收到相同的错误消息:" Invalid Client Secret"。

我正在使用"应用程序ID"作为客户秘密。然后我发现你需要进入"设置" Microsoft Azure门户中的选项卡

Microsoft Azure

并创建一个新的" Key"。密钥的名称并不重要。当您单击"保存"按钮,键的值将填入Web表单。立即复制,因为如果刷新网页,它将不会再次显示。

这是"客户端密码"您需要添加到配置中。

答案 3 :(得分:0)

我今天遇到了同样的问题,在@muthu的帮助下,我将其解决了。 使用天蓝色的应用程序注册生成客户端机密时。秘密很明显。但是,在其余调用中何时使用它,则必须对其进行urlencode。 使用视觉代码等编码器。但是必须对其进行编码,否则会产生错误

AADSTS7000215:提供了无效的客户机密码。

答案 4 :(得分:0)

您需要在POST正文中对client_secret进行64位编码。

例如(使用curl):

# Authn details
LoginURL='https://login.microsoftonline.com'
TenantDomain='********.onmicrosoft.com'
ClientID='********'
ClientSecret='********'

# Endpoint details
Resource='https://graph.microsoft.com'
TenantGUID="********"

# Authenticate with OAuth v1
URL="$LoginURL/$TenantDomain/oauth2/token?api-version=1.0"
json=`
curl \
        -s \
        -k \
        -X POST \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -u "$ClientID:$ClientSecret" \
        -d "grant_type=client_credentials" \
        -d "resource=$Resource" \
        -d "client_id=$ClientID" \
        --data-urlencode "client_secret=$ClientSecret" \
        $URL \
| python -m json.tool
`

access_token=`echo $json | python -c 'import sys, json; print json.load(sys.stdin)["access_token"]'`
token_type=`echo $json | python -c 'import sys, json; print json.load(sys.stdin)["token_type"]'`
#echo "access_token:$access_token"
#echo "token_type:$token_type:"

# Access resource
URL="$Resource/v1.0/directoryRoles/$TenantGUID/members"
curl \
        -s \
        -k \
        -X GET \
        -H "Content-Type: application/x-www-form-urlencoded" \
        -H "Authorization: $token_type $access_token" \
        $URL \
| python -m json.tool

答案 5 :(得分:0)

就我而言: 在配置中,您必须使用客户端机密“值”,而不是 ID。 此值仅在生成时可见。所以你现在可以复制/粘贴它。

enter image description here

见:https://docs.microsoft.com/en-us/answers/questions/370508/getting-34invalid-client-secret-is-provided34-erro.html