問題タブ [negotiate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
514 参照

groovy - Groovy HttpBuilder - ネゴシエート承認を送信しない

s so (具体的には shibboleth ) との接続に問題があります。groovy で HTTP Builder を使用しています。401 を取得したら、Authorization Negotiate を送信する必要がありますが、送信されません。手動で、または HTTP ビルダー認証メソッドを使用してヘッダーを定義しようとしましたが、まだ何もありません..助けはありますか?

0 投票する
2 に答える
1688 参照

c++ - libcurl は ntlm へのフォールバックをネゴシエートします

kerberos が利用できない場合、libcurl を NTLM にフォールバックさせたいと考えています。

私はこの設定を使用していますが、

実際に何が起こるかは、サーバーがサポートされているスキームを送信することです

ただし、クライアントはネゴシエート トークンのみを送信します

まだ SPN を定義していないので、NTLM フォールバックが機能することを期待していますが、これを取得します

私は、クライアントがいくつかの可能なトークンを送信し、サーバーがどれに応答するかを選択できるようにすることになっていると考えました。

何か案は?

0 投票する
1 に答える
6178 参照

c# - Realm サイトを使用した Negotiate/Basic に対する C# HTTPWebRequest

このトピックについて別の質問をして申し訳ありませんが、私は読んでいて、実際にはうまくいきません...

要点を言えば... zip ファイルをダウンロードするリンクがあります。私はこの Web サイト (私のユーザー) へのアクセス権を与えられており、今は時々 zip.file をフェッチするプログラムをコーディングして、そのデータを処理できるようにしようとしています。

認証が必要なものをダウンロードするためのコードを試してみたところ (以下のコードを参照)、HTTP 401 が返されました。資格情報は問題なく、ブラウザーを使用してファイルを取得できたので、なぜだろうと思いました。

読んで検索した後、認証に明示的に伝えなければならないという結論に達しました。メソッドを調べて CredentialCache の例を見つけました。私がしたことは、フィドラーを開いて、ウェブサイトが何を応答しているかを確認し、次のヘッダーを見つけたことです。

これで私は何の認証を知ることができました。タイプする必要があったので、コードを次のように変更しました。

それでも、401 HTTP エラーが発生しました。もう少し読んだ後、おそらく request.PreAuthenticate = true; を追加する必要があることがわかりました。しかし、結果は同じでした。また、request.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; を使用する必要があることも読みました。401 HTTPエラーを停止しましたが、「自動リダイレクトが試行されすぎました」というエラーが表示され始めたため、デフォルトの資格情報が必要なものではないため、このアイデアをあきらめました。ユーザーの資格情報を変更できるようにしたい.

さらに数回試行した後、あきらめて基本認証を試しました。メソッドですが、成功しませんでした(どういうわけか「レルム」の部分が欠けていると思います)。

とにかく、私はこれについて少し希望を失い、私が行ったすべての検索で混乱しました. リクエストとレスポンスについては、本当に少しばかげているように感じます...

誰かがこの主題に光を当てて私を助けることができますか? より安全なので、ネゴシエート方法をお勧めします。ハンドシェイクをシミュレートするために、何らかの方法で 2 番目のリクエストをコーディングする必要がありますか??

================================================== ================================================== ==== 更新 1

ブラウザとアプリのリクエストを比較すると、最初に行われたリクエストにいくつかの違いがあることがわかります。

ブラウザ

GET http://example.host/maps/selector/download?map_name=workline_fornecedores&organization_id=1 HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg 、application/x-ms-xbap、application/vnd.ms-excel、application/vnd.ms-powerpoint、application/msword、application/x-shockwave-flash、/ Accept-Language: PTSI User-Agent: Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729 ; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322) Accept-Encoding: gzip、deflate 接続: キープアライブ ホスト: example.host Cookie: WT_FPC=id=2edd0fbf206582555011375854627180:lv=1375854634144:ss=1375854627180; _swa_uv=527730711375858227; __utma=163226403.1634134224.1376900542.1376900542.1376900542.1

....

アプリ

GET http://example.host/maps/selector/download?map_name=workline_fornecedores&organization_id=1 HTTP/1.1 ホスト: example.host キャッシュ制御: no-store,no-cache プラグマ: no-cache 接続: Keep-Alive

どちらのサンプルでも、サーバーは 401 HTTP を応答しますが、違いがあります

...

ブラウザ

GET http://example.host/authorizer/check_remote_user?url=%2Fmaps%2Fselector%2Fdownload%3Fmap_name%3Dworkline_fornecedores%26organization_id%3D1 HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+ xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, / Accept-Language: PTSI User-Agent: Mozilla/4.0 (互換性あり; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729 ; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322) Accept-Encoding: gzip、deflate 接続: キープアライブ ホスト: example.host Cookie: WT_FPC=id=2edd0fbf206582555011375854627180:lv=1375854634144:ss=1375854627180; _swa_uv=527730711375858227; __utma=163226403.1634134224.1376900542.1376900542.1376900542.1; アパッチ=10.188.178.249.1416485792985658

...

アプリ

HTTP/1.1 ホスト: example.host Cookie: Apache=10.188.178.249.1416491766480034 キャッシュ制御: no-store,no-cache プラグマ: no-cache

この後、ブラウザのリクエストは資格情報を送信し続け、ファイルを取得しますが、アプリは他に何もしません。

現在のヘッダーの明らかな違いとは別に、Cookie ヘッダーの違いが原因である可能性があることにも気付きました。cookie の値が変化するかどうかを確認するために、roder でさらに「参照」リクエストを作成します。

0 投票する
1 に答える
550 参照

ios - SSH ネゴシエーション: 悪い SSH2_MSG_KEX_DH_GEX_REPLY か何か?

iOS用のUNIXサーバーsshエミュレーションを行っています。交渉の過程で、私は多くのハードルに出会い、今でもそれらと戦っています。最新の 1 つは SSH2_MSG_KEX_DH_GEX_REPLY パケット データに関するもので、間違ったパケット長を受け取ります (不要なパディングの可能性があります)。全体的なプロセスのパケットの説明は次のとおりです。

最後のパケット サーバー モックを送信した後、SSH2_MSG_NEWKEYS を返すデータはありません。

他の ssh エミュレーターのコードを調べましたが、どれも役に立ちませんでした。私はまったく無知です, どうすればいいですか, 助けてください, 本当にイライラしています.

0 投票する
1 に答える
1434 参照

windows-authentication - Windows 実行ファイル認証

Windows の認証方法とプロトコルを検索した結果、単純な実行可能ファイルで使用される Negotiate、Kerberos、および NTLM の正確な違いを理解してから、IIS と Web 認証を使用することにしました。

良い結果が得られましたが、Negotiate と Kerberos についてはまだ詳細が必要です。

次のシナリオがあります。

メッセージボックスに次の値を表示する、非常に単純な C# Windows フォームアプリケーションを作成しました。

私はローカル マシンの管理者権限を持つドメイン ユーザーであることに注意してください。次の結果が得られました。

  1. DCにアクティブに接続しているときにexeファイルを実行(ダブルクリック)すると、「ネゴシエート」が表示されました。

  2. DCにアクティブに接続しているときにexeファイルを実行すると(differnetユーザーとして/ローカルユーザーを使用して実行)、「NTLM」が発生しました。

  3. 「管理者として実行」または「別のユーザーとして実行」を使用してexeファイルを実行すると、「Kerberos」が発生しました。

  4. ローカルアカウントを使用してローカルにログインしているときにexeファイルを実行すると、「NTLM」が表示されます。

LSA がローカル アカウントにNTLMを使用することを理解しています。また、Active Directory がKerberosを使用してドメイン ユーザーとコンピューターを認証することも理解しています。

私の質問は、(ダブルクリック)、または同じアカウントを使用して「別のユーザーとして実行」することにより、アカウントを使用してexeを実行すると、ネゴシエート認証タイプを取得するのはなぜですか?

更新:次のことに気付きました:

-ローカルユーザーがexeを実行している場合、それはNTLM
です -ドメインユーザーがexeを実行している場合、それはネゴシエート(そのユーザーがローカル管理者である場合)ですが、Kerberos(そのユーザーがローカル管理者でない場合)です)
-ドメイン管理者が exe を実行する場合、それはKerberosです

この動作について説明します。

0 投票する
1 に答える
861 参照

wcf - WCF クライアントの既定の既定の SPN は、'host/myhostname' または 'http/myhostname' であり、その理由は?

この質問により、noidentity が指定された場合のデフォルトの動作は ですhost/myhostname

しかし、これは完全に真実ではないようです。

ID を指定しないと機能しない SOAP WCF サービス (Dynamics NAV Web サービスですが、質問は完全にクライアントの視点に関するものであるため、これは次の場合は問題になりません) があります。

サーバーは実際にはドメイン ユーザー アカウントで実行されています。 host/myhostnameが指定されていますが、このユーザー アカウントではなく、マシン アカウントに対してのみ指定されています。 http/myhostnameがこのドメイン ユーザー アカウントに指定されています。

3 つのシナリオを見てみましょう。

ID が指定されていません

EndpointAddress次のコードで作成します。

このシナリオでは、次のことが起こっています。

  • ヘッダーなしの HTTP POST Authorization
  • で応答しWWW-Authenticate: Negotiateます。
  • ヘッダー付きの HTTP POST Authorization: Negotiate XXXXXXで始まる 1584 の BASE64 エンコード バイト96 130 6です。その中に読み取り可能なASCIIが見つかりません。
  • Authorization: Negotiate XXXヘッダー付きの応答。XXX126 BASE64 でエンコードされたバイトです。その中に読み取り可能なASCIIが見つかりません。
  • ヘッダー付きの HTTP POST Authorization: Negotiate XXXXXX1527 BASE64 でエンコードされたバイトです。その中に読み取り可能なASCIIが見つかりません。
  • WWW-Authenticate: Negotiate XXXヘッダー付きの応答。XXX113 BASE64 でエンコードされたバイトです。その中に読み取り可能なASCIIが見つかりません。
  • この時点で、クライアントは例外をスローします。内部例外メッセージはThe target principal name is incorrect.

ID を手動でhost/myhostnameまたは間違った文字列に設定します。

次のコードで EndpointAddress を作成します。

がデフォルト設定である場合host/myhostname、上記のコードはこのデフォルト設定を明示的に指定するだけです。したがって、同じ動作が期待されます。しかし、これは機能します。NTLMにフォールバックしているようです。だから違いがあるに違いない

これが起こっていることです:

  • ヘッダーなしの HTTP POST Authorization
  • で応答しWWW-Authenticate: Negotiateます。
  • Authorization: Negotiate XXXXXX が 40 BASE64 でエンコードされたバイトであるHTTP POST 。最初のバイトは ASCII 文字NTLMSSPです。
  • WWW-Authenticate: Negotiate XXXXXX が 270 BASE64 でエンコードされたバイトである場合の応答。最初のバイトは ASCII 文字NTLMSSPです。また、FQDN は ASCII としてエンコードされているようです。
  • を含む HTTP POST。XXX はAuthorization: Negotiate XXX、BASE64 でエンコードされた 590 バイトです。今回はASCII文字はありません。
  • ペイロードでの応答。

興味深い事実: ID を間違った文字列に指定すると、まったく同じ動作になります。たとえば、次のEndpointAddressコードで を指定すると、次のようになります。

NTLM へのフォールバックでも上記の動作が得られます。

IDを正しく設定しましたhttp/myhostname

設定されている SPN を指定すると、 RFC 4559http/myhostnameにより正しい選択と思われます。これは構成です:

そして、これが起こっていることです:

  • ヘッダーなしの HTTP POST Authorization
  • で応答しWWW-Authenticate: Negotiateます。
  • ヘッダー付きの HTTP POST Authorization: Negotiate XXX。XXX は 1580 BASE64 でエンコードされたバイトです。ASCI サインはありません。
  • ペイロードでの応答。

この質問は、それを機能させるための熱意ではなく、理解に関するものです。私を混乱させているのは、最初の例と2番目の例の違いです。私の考えは次のとおりです。

  1. デフォルトの ID が の場合host/myhostname
  2. に ID を手動で指定しても違いはありませんhost/myhostname
  3. しかし、違いがあります
  4. したがって、これをデフォルトの ID にすることはできません。

だから私の質問は

  1. 実際のデフォルトの動作は何ですか。
  2. http/myhostnameRFC4559 が原因で、デフォルトの SPN として選択されないのはなぜですか?

そして/または私は何か完全に間違っていることを理解しましたか?