访问CRM / Sharepoint Web服务中的DefaultCredentials

时间:2009-02-03 03:34:48

标签: asp.net web-services sharepoint crm

我创建了一个访问CRM的Web服务的应用程序。问题是,当我将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的webservice(编写插件)并将其部署到CRM服务器的应用程序时。它无法访问Sharepoint的Web服务。未经授权的错误。这是代码:

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吗?

我要做的最后一件事是硬编码useraccount(如上面的代码)

7 个答案:

答案 0 :(得分:1)

可能是您需要运行Kerberos进行身份验证,但无法确定并且设置只是为了检查是一件痛苦的事。

答案 1 :(得分:1)

您是否确认默认凭据与明确说明时的凭据相同?可能是默认凭证是您不希望的其他帐户的凭证。

编辑#1 :根据DefaultCredentials property on MSDN的评论:

  

DefaultCredentials代表   当前的系统凭据   安全上下文中的   应用程序正在运行为一个   客户端应用程序,这些是   通常是Windows凭据(用户   名称,密码和域名   用户运行应用程序。对于   ASP.NET应用程序,默认   凭据是用户凭据   登录用户或用户   被冒充。

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

编辑#2 :假设您有权访问CRM和SharePoint服务器,您可能会在应用程序和系统日志中占据一席之地。其中一个或两个应该指示登录失败并指示哪个帐户试图访问该资源(在这种情况下是Web服务)。

答案 2 :(得分: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. 现在,转到Application Pools文件夹
  5. 尝试找到已在步骤3中列出的应用程序池名称 - >右键单击并选择“属性”
  6. 选择“身份”标签,您将找到运行应用程序池的用户帐户
  7. 希望这有帮助。

答案 3 :(得分:0)

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

试试。

答案 4 :(得分:0)

不熟悉Sharepoint,但是您不能只将连接信息存储在配置中并使用内置工具来保护您的web.config吗?那就是我做的事。

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

答案 5 :(得分:0)

为了能够使用defaultcredentials,必须在SharePoint和CRM中定义活动目录中的用户,并且具有足够的权限来执行您使用代码执行的操作。

尝试使用sdk(crm有辅助类)而不是服务定义。

答案 6 :(得分:0)

要解决此问题,您需要先知道哪个用户正在运行应用程序池,如其他人所说,如果您需要使用CredentialCache.DefaultCredentials,则必须添加用户,例如svcadmin等等。二级网站集管理员"通过运行SharePoint管理中心应用程序。通过该SP允许已经通过凭证的用户访问它所需要的东西。 enter image description here