尝试通过AcquireTokenAsync获取访问令牌,但是异常体参数失败必须包含' client_secret或client_assertion'

时间:2017-02-10 05:44:51

标签: c# access-token azure-active-directory

我正在尝试获取没有身份验证代码的访问令牌,因此使用以下方法来获取它。但我面临的问题是" 请求正文必须包含以下参数' client_secret或client_assertion' "

你能否提出必要的建议?在console application中运行。

try
{
    // Use the 'Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory' Nuget package for auth.
    AuthenticationContext authContext = new AuthenticationContext(authority);
    AuthenticationResult authResult = authContext.AcquireTokenAsync(resourceId, clientId, new UserCredential(crmAdminUserName, crmAdminPassword)).Result;
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

2 个答案:

答案 0 :(得分:0)

Azure AD上有两种客户端,一种是公共的,另一种是机密的,在我们获取令牌时需要提供秘密。

要解决此问题,您可以在此方案中注册公共客户端(本机客户端应用程序)。

Here是一个有关将应用程序与Azure活动目录集成的有用文档。

答案 1 :(得分:0)

假设门户网站中有app is registered,您知道客户端ID,客户端密钥/应用密钥,权限和受众

然后,此代码段将为您提供访问令牌

AuthenticationContext authContext = new AuthenticationContext(authority); ClientCredential clientCredential = new ClientCredential(clientId, clientkey); AuthenticationResult authenticationResult = await authContext.AcquireTokenAsync(ResourceUrl, clientCredential);

资源ID /资源网址,例如https://manage.windowsazure.com/ {占位符换您-天青-AD-承租人的名称} .onmicrosoft.com

AcquireTokenAsync文档可从here

获得

AuthenticationContext类文档可从here

获得