3

ユーザーパスワードを使用せずにAlfrescoのログインチケットを取得する機能を持つDLLを作成しています。 UPN)。私はalfresco REST APIサービス/wcserviceを呼び出しています。私はAlfrescoでNTLMを使用しています。ユーザーパスワードなしでAlfrescoのログインチケットを取得する方法、ユーザープリンシパル名(UPN)で偽装するユーザー

ここで説明したようにWindowsIdentityコンストラクタを使用しているユーザーをなりすまします。http://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingbyusingwindowsidentity私はチェックし、ユーザーは正しく偽装されています(WindowsIdentity.GetCurrent().Nameプロパティをチェックしました)。

ユーザーを偽装した後、私はHttpWebRequestを作成し、資格情報をCredentialsCache.DefaultNetworkCredentialsに設定しようとしています。私はエラーを取得する:

The remote server returned an error: (401) Unauthorized. 
    at System.Net.HttpWebRequest.GetResponse() 

私は要求の資格情報を設定するためにnew NetworkCredential("username", "[email protected]")を使用する場合、私はAlfrescoはログインチケット(HttpStatusCode.OK、200)を取得します。

ユーザーパスワードなしでAlfrescoログインチケットを取得する方法はありますか?

17:18:04,550 DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5 
17:18:04,550 DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.526239ms 
17:18:04,550 DEBUG [app.servlet.NTLMAuthenticationFilter] New NTLM auth request from 10.**.**.** (10.**.**.**:1229) 
17:18:04,566 DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5 
17:18:04,566 DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.400909ms 
17:18:04,566 DEBUG [app.servlet.NTLMAuthenticationFilter] Received type1 [Type1:0xe20882b7,Domain:<NotSet>,Wks:<NotSet>] 
17:18:04,566 DEBUG [app.servlet.NTLMAuthenticationFilter] Client domain null 
17:18:04,675 DEBUG [app.servlet.NTLMAuthenticationFilter] Sending NTLM type2 to client - [Type2:0x80000283,Target:AlfrescoServerA,Ch:197e2631cc3f9e0a] 

答えて

4

私はこの問題を解決しました!

私はdouble-hop problemと思っています。

これは、この問題を解決するために行われていたものです:私のDLLを実行します

  1. ユーザーは自分のDLLを使用していますのWindows Server 2003ドメイン ユーザー
  2. サービスは、を を登録している必要がありますする必要がありますサービスプリンシパル名( ) が実行されているドメインコントローラ(DLLを実行するユーザー)
  3. DLLを実行するユーザーは、 アカウントは重要であると が私のDLLを実行します コントローラ
  4. ユーザー 任意のサービスに 信託委任でこのユーザーを持っている必要があり、ドメインで選択オプション(ケルベロスのみ)または信託 これを委任することはできません持っていませんドメインコントローラで 指定サービスのみオプション が選択されている場合( ユーザーがWindows Server 2003にある場合 機能ドメイン)この ユーザーとのター サービスプリンシパル名)私のDLLが 私のDLLが用信頼コンピュータを持っている必要があります使用してサービスを実行
  5. 真のコンピュータに設定TrustedToAuthForDelegationユーザーアカウント制御(UAC)を持っている必要があります実行します
  6. ユーザー指定されたサービスへ 委任のためのサービス(Kerberosの のみ)または信託コンピュータへ 委任ドメインコントローラ
  7. で選択 のみオプション

これはすべて、Microsoftの文書Troubleshooting Kerberos Delegationで説明されています。それは含まれています:Active Directoryの

  • チェックリスト、クライアントアプリケーションのための
  • チェックリスト、
  • 中間層のためのチェックリスト、
  • バックエンドのためのチェックリスト

プラス

  • 共通の設定例 シナリオ。 Active Directoryのコマンドレットにより、PowerShellで行われTrustedToAuthForDelegationユーザーアカウント制御(UAC)の設定

hereを説明しました。

Windows Authentication in ASP.NET 2.0について詳しく読むことができます。

もちろん、AlfrescoにはKerberosログインが有効になっている必要があります。

1

私はそれがあると思う:Alfrescoはあるstdout.logから

private string GetTicket(string UPN) { 
WindowsIdentity identity = new WindowsIdentity(UPN); 
WindowsImpersonationContext context = null; 

try { 
    context = identity.Impersonate(); 

    MakeWebRequest(); 
} 
catch (Exception e) { 
    return e.Message + Environment.NewLine + e.StackTrace; 
} 
finally { 
    if (context != null) { 
    context.Undo(); 
    } 
} 
} 

private string MakeWebRequest() { 
string URI = "http://alfrescoserver/alfresco/wcservice/mg/util/login"; 


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

request.CookieContainer = new CookieContainer(1); 

//request.Credentials = new NetworkCredential("username", "[email protected]"); // It works with this 
request.Credentials = CredentialCache.DefaultNetworkCredentials; // It doesn’t work with this 
//request.Credentials = CredentialCache.DefaultCredentials; // It doesn’t work with this either 

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

    return sr.ReadToEnd(); 
    } 
} 
catch (Exception e) { 
    return (e.Message + Environment.NewLine + e.StackTrace); 
} 
} 
ここ

のレコード(それがどのような方法で助けている場合):ここでは

は、私が使用しているコードです。 Alfrescoでは不可能です。この「非個人的な」ユーザーが存在する特別な認証サブシステムを使用する場合のみ。

これは、 'ゲスト'ユーザーがすべてのサブシステム認証に対してトランスバーサルであるためです。

request.Credentials = new NetworkCredential( "guest"、 "guest");

そしてURI、このような何か:

文字列URI =「のhttp:// alfrescoserver /屋外/ S/API /ログインまたは何でもあなたが提案する

幸運 パコ

+1

私がhttp:// alfrescoserver/alfresco/s/api/loginを使用する場合、私は避けようとしているパラメータとしてユーザのパスワードを提供する必要があります。 私は何をしようとしているのは可能であると信じています。私がする必要があるのは、HTTPリクエストの正しい資格情報を取得することだけです。たぶん私はダブルホップの問題があります(http://blogs.msdn.com/b/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx)、私はMicrosoftのドキュメントであるKerberosのトラブルシューティングを読んでいます委任(http://www.microsoft.com/downloads/en/details.aspx?familyid=99b0f94f-e28a-4726-bffe-2f64ae2f59a2&displaylang=en)を参照して解決してください。 私はまだ助けが必要です。 – dok

関連する問題