7

我制作了一个访问 CRM 网络服务的应用程序。问题是,当我将 dll 部署到 Sharepoint 服务器时,它返回错误 401 未经授权。显然 System.Net.CredentialCache.DefaultCredentials 不起作用(我的怀疑)。这是代码。

CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken();
token.AuthenticationType = AuthenticationType.AD;
token.OrganizationName = ORGANIZATION_NAME;

CrmService service = new CrmService();
service.Url = "http://crmserver:5555/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.PreAuthenticate = true;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

反之亦然。

当我制作访问 Sharepoint 的 web 服务(对插件进行编码)并将其部署到 CRM 服务器的应用程序时。它无法访问 Sharepoint 的网络服务。未经授权的错误。这是代码:

Lists listService = new Lists();
listService.PreAuthenticate = true;
listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
listService.Url = "http://sharepointserver/webname/_vti_bin/Lists.asmx";

我的 CRM 服务器和 Sharepoint 服务器在同一个域中。

对于这两个代码,如果我将凭据部分更改为类似的内容,然后将其部署到服务器上,它就可以运行。

service.Credentials = new NetworkCredential("username", "password", "domain");

不过,我不想这样做,因为它会在代码中显示用户的密码。有人可以帮助我吗?

两台服务器中的 IIS 都不允许匿名访问,它使用集成 Windows 身份验证。

谢谢


从我的本地计算机上,我可以访问 CRM Web 服务或 Sharepoint Web 服务。我想我已获得授权,因为 DefaultCredentials 发送了我的凭据,其密码保存在“存储的用户名和密码”(控制面板>用户帐户>选项卡高级>管理密码)这样,我不必输入:

service.Credentials = new NetworkCredential("username", "password", "domain");

并且我本地 comp 中的 DefaultCredentials 被授权访问 Web 服务。

我试图在访问 CRM Web 服务的 Sharepoint 服务器上实现这一点。和..tadaa..它不会工作。哈哈哈。。

我们可以将凭据注入服务器中的 DefaultCredentials 吗?

我想做的最后一件事是硬编码用户帐户(如上面的代码)

4

7 回答 7

1

可能是您需要运行 Kerberos 进行身份验证,但不能确定,而且设置只是为了检查很痛苦。

于 2009-02-03T03:53:01.997 回答
1

您是否确认默认凭据与您明确声明时的凭据相同?可能默认凭据是您不期望的另一个帐户的凭据。

编辑#1 :根据MSDN 上 DefaultCredentials 属性的注释:

DefaultCredentials 表示当前运行应用程序的安全上下文的系统凭据。对于客户端应用程序,这些通常是运行应用程序的用户的 Windows 凭据(用户名、密码和域)。对于 ASP.NET 应用程序,默认凭据是登录用户或被模拟用户的用户凭据。

您还需要确保访问 CRM 页面(调用 SharePoint Web 服务)的用户可以使用他们的凭据访问 Web 服务,反之亦然。如果他们可以,那么似乎更有可能发生某种模仿。

编辑#2:假设您可以访问 CRM 和 SharePoint 服务器,您可能会同时访问应用程序和系统日志。一个或两个应该可能指示登录失败并指示哪个帐户尝试访问资源(在本例中为 Web 服务)。

于 2009-02-03T21:16:14.997 回答
1

通过使用 DefaultCredentials 意味着 ASP.NET 工作进程或 IIS 工作进程将获取运行 IIS 应用程序池的用户的凭据。

因此,如果您的 Dynamics CRM 应用程序池在用户帐户 Custom-CRM-Domain\JohnDoe 下运行,这意味着它将获得用户帐户 Custom-CRM-Domain\JohnDoe 下的权限。

请检查运行 CRM\Sharepoint Application IIS Web 应用程序的应用程序池的用户帐户。

这些是检查应用程序池的步骤:

  1. 打开网站->右键单击->选择属性
  2. 选择主目录选项卡
  3. 请注意下面下拉列表中的应用程序池名称
  4. 现在,转到应用程序池文件夹
  5. 尝试找到已在步骤 3 中列出的应用程序池名称 -> 右键单击​​并选择属性
  6. 选择“身份”选项卡,您将找到运行应用程序池的用户帐户

希望这可以帮助。

于 2009-06-13T02:39:11.997 回答
0

Not familiar with Sharepoint, but can't you just store the connection information in a configuration and use built in tools for securing your web.config? Thats what I do.

http://aspnet.4guysfromrolla.com/articles/021506-1.aspx

于 2009-02-11T19:31:49.533 回答
0

service.Credentials = System.Net.CredentialsCache.DefaultNetworkCredentials;

试试看。

于 2009-02-06T02:43:13.570 回答
0

为了能够使用默认凭据,必须在 SharePoint 和 CRM 中定义 Active Directory 中的用户,并具有足够的权限来执行您正在使用代码执行的操作。

并尝试使用 sdk(crm 有帮助程序类)而不是服务定义。

于 2009-04-02T11:48:35.770 回答
0

要解决此问题,您需要首先知道哪个用户正在运行应用程序池,如果您需要使用 CredentialCache.DefaultCredentials 那么您必须将用户添加到“辅助站点集管理员”中,例如 svcadmin 等运行 SharePoint 中央管理应用程序。通过该 SP 允许已通过凭证的用户访问它需要的东西。在此处输入图像描述

于 2015-02-26T15:26:03.870 回答