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

Trying to get access token by AcquireTokenAsync but getting failed with exception body parameters must contain 'client_secret or client_assertion'

我想在没有授权码的情况下获取访问令牌,所以使用下面的方法来获取它。但我面临的问题是“请求正文必须包含以下参数'client_secret or 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);
}

Azure AD 上有两种客户端,一种是public,另一种是保密的,需要在获取token的时候提供secret。

要解决此问题,您可以在这种情况下注册一个 public 客户端(本机客户端应用程序)。

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

假设门户中的 app is registered,并且您知道客户端 ID、客户端密码 key/app 密钥、权限和受众

然后此代码段将为您获取访问令牌

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

资源 Id/Resource Url 例如https://manage.windowsazure.com/{placeholder-for-your-azure-ad-tenant-name}。onmicrosoft.com

AcquireTokenAsync 文档可从 here

获得

AuthenticationContext class 文档可从 here

获得