【问题标题】:Accessing Dynamics CRM via username/password throwing AdalServiceException: AADSTS65001通过用户名/密码访问 Dynamics CRM 并抛出 AdalServiceException:AADSTS65001
【发布时间】:2020-09-09 08:30:12
【问题描述】:

我按照这里的快速入门:https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/enhanced-quick-start

效果很好,所以我需要注册我的应用程序,所以我遵循了这个: https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/walkthrough-register-app-azure-active-directory

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

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: AADSTS65001:用户或管理员未同意使用 ID 为“[GUID]”的应用程序名为“[AppName]”。发送互动 对此用户和资源的授权请求。

我觉得我理解错误,需要管理员同意。我的程序在 bakcgorund 中做了一些魔术,用户没有登录,它使用的是设置的用户名和密码,用户不应该同意任何人。有没有办法永久设置这个同意,或者每次都通过第一个教程中的 Helper 类强制它?我所有的 Google-fu 都是空的...谢谢。

【问题讨论】:

  • 您应该使用 ClientId 和 ClientSecret 进行身份验证,而不是用户名密码。当您在 Azure 中创建 AppRegistration 时,您选择了 Delegate 吗?
  • 微软自己的文档使用用户名/密码(上面的链接) - 你能指出一个 ClientSecret 的例子吗?
  • 我看过所有这些文章,它们都展示了所有东西的旧版本——最重要的是委托权限。我切换到 ClientId 和 ClientSecret,我得到了同样的错误。有谁知道动态委托权限的最新指南在哪里?
  • 您尝试过我发布的连接吗?尝试从头开始创建应用注册。我从来没有遇到过这个问题

标签: azure-active-directory dynamics-crm microsoft-dynamics common-data-service


【解决方案1】:

你可以这样使用:

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;
    }

或者如果你想使用连接字符串,你可以使用这个:

连接字符串:https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/xrm-tooling/use-connection-strings-xrm-tooling-connect

        var connectionString = 
            ConfigurationManager.ConnectionStrings["XY"].ConnectionString;

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

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2018-04-05
    • 1970-01-01
    • 2021-11-15
    • 2018-07-09
    • 1970-01-01
    • 2011-12-07
    • 2015-10-25
    • 2012-01-05
    相关资源
    最近更新 更多