質問

私は、ユーザーがログインしてより多くの個人情報を取得できるサイトに取り組んでいます。私のクライアントには別のサイトがあり、そこでは Nt認証 アクセスするためです。

彼らがやりたいのは、 button 私が取り組んでいるサイトのプライベートエリアの下にあり、 認証されていません ただし、そのサイトにログオンする必要はなく、代わりに ユーザー名 そして パスワード 彼らは私のサイトから別のサイトにログインしていたということです。

これは可能でしょうか?そしてどうすればそれを達成できるでしょうか?これを行うより良い方法はありますか?

役に立ちましたか?

解決

これは (未検証の) 理論です。その詳細は、Sharepoint サイトがどのような種類の認証を受け入れるかによって大きく異なります。取り組みます 基本, 、それが最も簡単なので。

XMLHttpRequest を使用して Sharepoint サイトに要求を送信する JavaScript を作成し、ユーザー名とパスワードを要求ヘッダーに追加します。ユーザーのブラウザはその JavaScript を実行し、Sharepoint サイトにログインします。

これで、ユーザーがリンクをクリックすると、クライアントのブラウザーには、Sharepoint サイトに送信するためのキャッシュされた資格情報が含まれるはずです。

考えられる問題:

  • XMLHttpRequest ではクロスドメイン認証が許可されません
  • ブラウザと XHR は認証情報を共有しません
  • Sharepoint と XHR は認証方法について合意できません

もう 1 つのオプションは、Sharepoint への接続をプロキシすることです。これにより、(XHR の制限とブラウザのセキュリティをバイパスして) サーバー側にログインできるようになりますが、サーバーに負荷がかかり、場合によっては URL ターゲットの問題が発生します。

他のヒント

他のサイトはあなたのユーザー名とパスワードをどのように検証しますか?

理想的には、サイトはユーザーのパスワードを別のサイトに渡すことができるように記憶する必要さえありません (パスワードそのものではなくパスワードのハッシュを保存し、検証時にのみ実際のパスワードを使用します)。

サイトがユーザーにトークンを提供し、ユーザーがそのトークンを新しいサイトに提示し、新しいサイトがサイトにトークンを検証するように要求した場合はどうなるでしょうか。基本的に、2 番目のサイトは、ユーザーが誰であるかを伝えることを信頼しています。

2 番目のサイトが実際にユーザー名 (基になるファイルのアクセス許可など) を取得する以外の目的で Windows アカウントを使用している場合、このシナリオではユーザーが実際の Windows ユーザー アカウントとしてログオンしていないため、これはすべて破綻します。

2 番目のサイトに対して認証する必要がある場合は、新しいスレッドを生成し、Windows LogonUser API を呼び出す必要がある場合があります。セキュリティ トークンを取得したら、それを新しいスレッドに割り当て、そのスレッド経由で接続を実行します。

LogonUser には拡張された権限が必要であり、マネージド コードではないため、使用にはかなり重大な問題がいくつかあります。しかし、これが、フォーム認証されたサイトが Windows 認証されたサービス/サイトと通信するために私が見つけた唯一の回避策でした。

お役に立てれば。

これはイントラネット環境ですか?そうであれば、とにかくログインする必要はありません。SharePoint が「統合認証」を使用して設定されており、サイトが IE の信頼済みサイトとしてリストされている場合、ブラウザーは自動ログインにそのネットワーク認証を使用します。これは次のように設定できます ファイアフォックス 同じように。

ユーザーは、NTLM チャレンジを取得しない限り、NTLM サイトに直接接続できません。私なら、NTLM サイトへの事実上プロキシとなるものを書きます。つまり、サーバー側コードには NTLM サイトに接続するための資格情報があり、ユーザーからのリクエストを通過します。

あなたが言ったように、それはSharePointです(唾を吐きます) SharePoint には、(画面スクレイピングを行うのではなく) これに使用できる Web サービスが多数あることに留意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top