7

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 の Web サービスにアクセスするアプリケーション (プラグインのコーディング) を作成し、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");

私のローカルコンプからの私の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 サーバーの両方にアクセスできると仮定すると、アプリケーション ログとシステム ログの両方にピークが生じる可能性があります。1 つまたは両方が、ログインの失敗を示し、リソース (この場合は 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 アプリケーション IIS Web アプリケーションのアプリケーション プールを実行するユーザー アカウントを確認してください。

アプリケーション プールを確認する手順は次のとおりです。

  1. ウェブサイトを開く -> 右クリック -> プロパティを選択
  2. [ホーム ディレクトリ] タブを選択します
  3. 下のドロップダウン リストにあるアプリケーション プール名に注目してください。
  4. 次に、アプリケーション プール フォルダーに移動します。
  5. 手順 3 で一覧表示されたアプリケーション プール名を探します -> 右クリックして [プロパティ] を選択します。
  6. [ID] タブを選択すると、アプリケーション プールを実行するユーザー アカウントが表示されます。

お役に立てれば。

于 2009-06-13T02:39:11.997 に答える
0

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

それを試してみてください。

于 2009-02-06T02:43:13.570 に答える
0

この問題を解決するには、他の人が言ったように、最初にどのユーザーがアプリケーション プールを実行しているかを知る必要があります。CredentialCache.DefaultCredentials を使用する必要がある場合は、svcadmin などのユーザーを「セカンダリ サイト コレクション管理者」に追加する必要があります。 SharePoint 集中管理アプリケーションを実行しています。その SP により、資格情報が渡されたユーザーが必要なものにアクセスできるようになります。ここに画像の説明を入力

于 2015-02-26T15:26:03.870 に答える
0

Sharepoint に慣れていませんが、接続情報を構成に保存し、組み込みツールを使用して web.config を保護することはできませんか? それが私がすることです。

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

于 2009-02-11T19:31:49.533 に答える
0

defaultcredentials を使用できるようにするには、Active Directory のユーザーが SharePoint と CRM の両方で定義されており、コードで行っていることを行うのに十分な権限を持っている必要があります。

また、サービス定義の代わりに sdk (crm にはヘルパー クラスがあります) を使用してみてください。

于 2009-04-02T11:48:35.770 に答える