3

CRM インスタンスでクレーム ベース認証を構成しました。カスタム STS を使用しています (サンプルはこちらから入手できます) ここで、テスト アプリケーションから Web サービスにアクセスしたいと考えています。誰かがこれの例を持っていますか? Windows認証の場合、同じコードで接続してみました。しかし、もちろん失敗。エラーが発生します:

{"認証エンドポイントの Kerberos が、構成された Secure Token Service で見つかりませんでした!"}

これは接続用のコードです (AD 認証タイプの場合):

OrganizationServiceProxy orgserv;
      ClientCredentials clientCreds = new ClientCredentials();
      ClientCredentials devCreds = new ClientCredentials();


        clientCreds.Windows.ClientCredential.UserName = "user";
        clientCreds.Windows.ClientCredential.Password = "P@$$w0rd";
        clientCreds.Windows.ClientCredential.Domain = "myDomain";
        IServiceConfiguration<IOrganizationService> orgConfigInfo =
                    ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(new Uri("https://myCRMServer/myOrg/XRMServices/2011/Organization.svc"));

        using (orgserv = new OrganizationServiceProxy(orgConfigInfo, clientCreds))
        {
          orgserv.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
          orgserv.EnableProxyTypes();
          connection = orgserv;
        }

クレーム ベースの認証では、UPN (ユーザー プリンシパル名) のみを送信するだけで十分であることがわかりました。しかし、同じエラーが発生します。ユーザー名とパスワードの組み合わせも試しましたが、失敗しました。

AuthenticationCredentials authCredentials = new AuthenticationCredentials();

...

authCredentials.UserPrincipalName = "user";

...

authCredentials.ClientCredentials.UserName.UserName = _userName;
authCredentials.ClientCredentials.UserName.Password = _password;

この後のエラーは次のとおりです。The authentication endpoint Username was not found on the configured Secure Token Service!

4

2 に答える 2

3

CRM 2011 の Web サービス インターフェイスを使用するだけであれば、クレームは問題ではないと思います。次のコードにより、認証して CRM 2011 に接続し、REST API を使用できるようになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace CRM_REST_FromConsoleApplication
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var url = new Uri(@"https://MyServer/MyOrganiation/xrmservices/2011/organizationdata.svc/AccountSet?$select=Name&$top=10");

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

            //TODO: Set Credentials Here            
            request.Credentials = new NetworkCredential("USERNAME GOES HERE", "PASSWORD GOES HERE", "myDomain");


            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());

                Console.WriteLine(reader.ReadToEnd());
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
    }
} 
于 2012-08-24T20:08:26.233 に答える
1

私は最終的にこの問題を解決しました。最後に、ADFS を構成し、カスタム STS の中継パーティ信頼を追加しました。これで完璧に動作します。API 呼び出しは ADFS を介して行われ、Web アクセス認証はカスタム STS を介して行われます。

于 2013-03-19T22:39:25.727 に答える