C# 正文必须包含client\u secret或client\u断言

C# 正文必须包含client\u secret或client\u断言,c#,azure-active-directory,adal,dynamics-crm-online,C#,Azure Active Directory,Adal,Dynamics Crm Online,我将新应用程序注册为Web app/API(非本机),添加了作为组织用户访问Dynamics 365的权限 我遵循此指南(),其中包含以下代码,唯一的区别是我更新了我的Microsoft.IdentityModel.Clients.ActiveDirectory库,该库需要少量代码更改 //Obtain the Azure Active Directory Authentication Library (ADAL) AuthenticationParameters ap = Authe

我将新应用程序注册为Web app/API(非本机),添加了作为组织用户访问Dynamics 365的权限

我遵循此指南(),其中包含以下代码,唯一的区别是我更新了我的
Microsoft.IdentityModel.Clients.ActiveDirectory
库,该库需要少量代码更改

//Obtain the Azure Active Directory Authentication Library (ADAL)    
AuthenticationParameters ap = AuthenticationParameters.CreateFromResourceUrlAsync(new Uri(serviceUrl + "api/data/")).Result;

AuthenticationContext authContext = new AuthenticationContext(ap.Authority, false);

//Note that an Azure AD access token has finite lifetime, default expiration is 60 minutes.
AuthenticationResult authResult = authContext.AcquireTokenAsync(
    serviceUrl, clientId, new Uri(redirectUrl), 
    new PlatformParameters(PromptBehavior.Always)).Result;
当我运行此程序时,会弹出一个弹出窗口,在其中填写我的凭据,然后它会抛出以下错误:

AdalException: {"error":"invalid_client","error_description":"AADSTS70002: The request body must contain the following parameter: 'client_secret or client_assertion'.\r\nTrace ID: xxx\r\nCorrelation ID: xxx\r\nTimestamp: 2018-06-28 10:17:20Z","error_codes":[70002],"timestamp":"2018-06-28 10:17:20Z","trace_id":"xxx","correlation_id":"xxx"}: Unknown error
我试图通过应用下面的更改来添加客户端的秘密,但仍然不起作用

AuthenticationResult authResult = authContext.AcquireTokenAsync(
    serviceUrl, clientId, new Uri(redirectUrl), 
    new PlatformParameters(PromptBehavior.Always), UserIdentifier.AnyUser, 
    $"client_secret={clientSecret}").Result;
但当我运行它时,它确实工作,但这不是我想要的,我想用特定的用户登录

AuthenticationResult authResult = authContext.AcquireTokenAsync(
    serviceUrl, new ClientCredential(clientId, clientSecret)).Result;

客户端凭证和客户端断言身份验证流用于服务到服务的通信,而无需用户参与。因此,您的Web Api将访问动态,而不是在用户上下文中,而是作为其本身

查看官方维基以了解更多信息:


另外,请注意,如果您对Microsoft.IdentityModel.Clients.ActiveDirectory进行更改,我们将无法为您提供帮助。你也会错过一些更新,其中一些是安全关键的。但是,如果您认为其他人会受益,请随意提出更改

客户端凭据和客户端断言身份验证流用于服务对服务通信,无需用户参与。因此,您的Web Api将访问动态,而不是在用户上下文中,而是作为其本身

查看官方维基以了解更多信息:

另外,请注意,如果您对Microsoft.IdentityModel.Clients.ActiveDirectory进行更改,我们将无法为您提供帮助。你也会错过一些更新,其中一些是安全关键的。但是,如果您认为其他人会受益,请随意提出更改