Azure active directory 通过用户名/密码访问Dynamics CRM引发AdalService异常:AADSTS65001

Azure active directory 通过用户名/密码访问Dynamics CRM引发AdalService异常:AADSTS65001,azure-active-directory,dynamics-crm,microsoft-dynamics,common-data-service,Azure Active Directory,Dynamics Crm,Microsoft Dynamics,Common Data Service,我在这里遵循了快速入门: 这非常有效,所以我需要注册我的应用程序,所以我遵循以下步骤: 但是现在我的单元测试给了我一个错误: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalService异常: AADSTS65001:用户或管理员尚未同意使用 ID为“[GUID]”并命名为“[AppName]”的应用程序。发送一个交互式 此用户和资源的授权请求 我觉得我理解这个错误,管理员需要同意。我的程序在bakcgorund中发挥了一些神奇的作用,

我在这里遵循了快速入门:

这非常有效,所以我需要注册我的应用程序,所以我遵循以下步骤:

但是现在我的单元测试给了我一个错误:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalService异常: AADSTS65001:用户或管理员尚未同意使用 ID为“[GUID]”并命名为“[AppName]”的应用程序。发送一个交互式 此用户和资源的授权请求


我觉得我理解这个错误,管理员需要同意。我的程序在bakcgorund中发挥了一些神奇的作用,用户没有登录,它使用的是设置好的用户名和密码,用户不应该同意任何人。是否有任何方法可以永久设置此同意,或者在第一个教程中通过Helper类强制每次都这样做?我所有的谷歌搜索结果都是空的。。。谢谢。

您可以使用以下内容:

CrmserviceClient来自Microsoft.Xrm.Tooling.Connector nuget

 private CrmServiceClient GenerateService()     
    {            
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;            
        ServicePointManager.Expect100Continue = true;              
        ServicePointManager.CheckCertificateRevocationList = true;            
        ServicePointManager.DefaultConnectionLimit = 10; 
        var service = new CrmServiceClient(new Uri(organizationUrl), clientId, secret, false, string.Empty);
        if (service.IsReady == false)
        {
            throw new Exception("CrmOrgService isn't ready. " + service.LastCrmError);
        }
        return service;
    }
或者,如果要使用连接字符串,可以使用以下命令:

连接字符串:


您应该使用ClientId和ClientSecret进行身份验证,而不是用户名密码。当你在Azure中创建AppRegistration时,你是否选择了委派?Microsoft自己的文档使用用户名/密码(上面的链接)-你能给我指出一个ClientSecret示例吗?这里的问题与我看到的所有文章相同,它们都显示了所有内容的旧版本-最重要的是委派权限。我切换到ClientId和ClientSecret,得到了相同的错误。有人知道最新的动态代理权限指南在哪里吗?你试过我发布的连接吗?尝试从头开始创建应用注册。我从来没有遇到过这个问题
        var connectionString = 
            ConfigurationManager.ConnectionStrings["XY"].ConnectionString;

        var conn = new CrmServiceClient(connectionString);
        IOrganizationService orgService = conn.OrganizationServiceProxy;