問題タブ [sspi]
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.
sql-server - sspi ユーザーのベスト プラクティス
現在、3 つの mvc Web アプリケーション用に Web および SQL Windows サーバーを設定しています。私はsspiドメインユーザーをセットアップしましたが、そのための適切で最適なセットアップに精通していません。
すべてのアプリ プールがこのユーザーでセットアップされますか? SQL サーバー上のすべてのデータベースは、このユーザーの読み取り/書き込み権限を取得しますか?
sspi ユーザーと作業するときのベスト プラクティスを探しています。
winapi - ユーザー名で SSPI 経由で Kerberos トークンを取得する
パスワードなしでユーザートークンをローカルで取得する方法はありますか?
wcf - クライアントとサーバーが同じWindowsIDを使用していない限り、sspiを使用したWCFNet.tcpは失敗します
WindowsサービスによってホストされているWCFサービスがあります。サービスが実行されているのと同じクレデンシャルを使用してクライアントマシンにログオンすると、クライアントアプリは成功しますが、他の有効なドメインアカウントでログインすると、例外が発生して失敗します。
テストしている2つのアカウントがあります。1つは通常のユーザーアカウントで、もう1つは管理者アカウントです。以下にリストされている4つの組み合わせすべてを試しました。
ご覧のとおり、クライアントとサーバーの両方が非管理者アカウントで実行されている場合はシステムが機能するため、管理者の問題になることはありません。どちらの場合も、サーバーログに何も起きていないという同じ例外がクライアントで発生します。
「SSPIの呼び出しに失敗しました。内部例外を参照してください」
内部の例外は、「ターゲットプリンシパル名が正しくない」です。
アカウントをSPNとして登録しました。
この問題はクライアントアプリからのみ発生しますが、VisualStudioにWCVFTestClient.exe付属しているを使用した場合は発生しません。
WCFトレースログの例外は次のとおりです。
"System.ServiceModel.Security.SecurityNegotiationException、System.ServiceModel、Version = 4.0.0.0、Culture = neutral、PublicKeyToken =b77a5c561934e089"
メッセージ付き:
「リモート側で認証に失敗しました(ストリームは引き続き追加の認証試行に使用できる可能性があります)。」
スタックトレースは一番下にあります:何が問題なのですか?
スタックトレース
System.ServiceModel.Channels.WindowsStreamSecurityUpgradeProvider.WindowsStreamSecurityUpgradeAcceptor.OnAcceptUpgrade(Stream stream、SecurityMessageProperty&remoteSecurity)System.ServiceModel.Channels.StreamSecurityUpgradeAcceptorBase.AcceptUpgrade(Stream stream)System.ServiceModel.Channels.InitialServerConnectionReader.UpgradeConnection(IConnection connection、StreamUpgradeAcceptor upgradeAccept System.ServiceModel.Channels.ServerSessionPreambleConnectionReader.ServerFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)System.ServiceModel.Dispatcher.ChannelHandler.OpenAndEnsurePump()System.Runtime.ActionItem.DefaultActionItem.TraceAndInvoke() System.Runtime.ActionItem.CallbackHelper。InvokeWithoutContext(Object state)System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode、UInt32 numBytes、NativeOverlapped * nativeOverlapped)System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error、UInt32 bytesRead、NativeOverlapped * nativeOverlapped .PerformIOCompletionCallback(UInt32 errorCode、UInt32 numBytes、NativeOverlapped * pOVERLAP)NativeOverlapped * pOVERLAP)NativeOverlapped * pOVERLAP)
c++ - SSPI から委任された資格情報を使用して Windows で CreateProcessAsUser を行う方法は?
私は Kerberos ログオン インフラストラクチャ (シングル サインオン) で作業しています。
- Kerberos Key Distribution Center に対して認証されるクライアント。
- Kerberos を認証として使用するプリンシパル サービス サーバー。
サーバー プログラムは C++ でコーディングされています。
プリンシパル (クライアント) とサービス プリンシパル (サーバー) の間のコンテキストを問題なく作成できます。また、クライアント ユーザー資格情報を使用してサーバー上にプロセスを作成する必要があるため、クライアント資格情報もサーバーに委任しました。
これは私の問題です。サーバー側では、SSPI コンテキストがあり、Windows の type を使用して CreateProcessAsUser が必要ですpHandle。
SSPI 資格情報を使用して、クライアント ユーザーとしてサーバー上にプロセスを作成する方法がわかりません。
LsaLogonUser を調べてみましたが、これは私が望んでいること (kerberos ユーザー資格情報からハンドルを作成する) のようですが、問題は同じです。この LsaLogonUser で SSPI トークンを使用する方法がわかりません。
よろしくお願いします。
c# - クライアントサーバー認証 - SSPI を使用していますか?
私はクライアント/サーバー アプリケーションで作業しており、クライアントがユーザーのログオン資格情報を使用してサーバーに対して自身を認証するようにしたいのですが、ユーザーがユーザー名とパスワードを入力する必要はありません。パスワードを安全に処理する責任を負いたくないのは確かです。ユーザーが自分が誰であるかを証明するだけで、サーバーは先に進み、コマンドを許可/拒否できます。
ユーザーはドメインの一部であるため、ログイン時に作成したログオン資格情報を使用できるようにしたいと考えています。
私はどのような種類の Web サービスも使用していませんし、使用したくもありません。私はクライアント ソフトウェアとサーバー ソフトウェアの両方を管理しており、どちらも純粋な C# で記述されており、作業を完了するために古き良きソケットを使用しています。
私は純粋な C#/.Net でこれを行うことを好みますが、安全でない C# を使用して、win32 API に pinvokes することにオープンです。
Windows での SSPI について少し読んだことがありますが、この種のアプリケーション開発は私にとって初めてのことなので、暗闇の中で感じています。
誰もこれを行う方法を知っていますか? SSPIは道ですか?C# 内から SSPI を使用するにはどうすればよいですか? コードの移植性を維持できる .Net ネイティブの方法はありますか?
curl - SSPI による Kerberos 認証
注:私はなんとか進歩を遂げました。現在の質問の編集を参照してください。ありがとうございます。
Windows で libcurl を使用して、Kerberos/GSSAPI 認証で Web サイトにアクセスしたいと考えています。最初は MIT Kerberos で解決しようとしましたが、SSPI を使用した NTLM 認証も必要です (libcurl は 2 つの異なる実装からの両方の使用をサポートしていません)。そのため、Windows SSPI ライブラリを使用して Kerberos で認証しようとしています。SSPI と SPNEGO をサポートする libcurl をコンパイルすることができました。
今私の問題は、提供された資格情報を使用して提供されたレルムに接続する必要があることです(現在のユーザーのレルムまたは別のレルムである可能性があります)。私が理解したことから、Kerberos チケットを取得するには、secur32.dll/security.dll から AcquireCredentialsHandle と InitializeSecurityContext を呼び出す必要があります。
しかし、それを機能させようとするたびに、私は:
- SSPI キャッシュで提供された資格情報/レルムの DC からチケットを取得しないでください (エントリを表示するために kerbtray.exe を使用しています)。
- これらのメソッドを使用する場合、このキャッシュにチケットが表示されますか?
- InitializeSecurityContext/AcceptSecurityContext のクライアント/サーバー ループバックで ImpersonateSecurityContext を呼び出した後に libcurl を使用し、Wireshark でパケットを確認すると、libcurl は提供された資格情報を使用せず、代わりに NTLM にフォールバックすることがわかります (認証が失敗するだけです)。 )
- ループバック クライアント/サーバーは正しい動作ですか (Web 上で他の実装例を見つけることができませんでした)。
- 偽装が成功したと仮定して、libcurl はスレッドの偽装された資格情報を使用する必要がありますか?
- libcurl は NTLM + Kerberos と SSPI をまったくサポートしていますか?
デバッグとテストを容易にするために、MIT Kerberos ライブラリの kinit など、SSPI キャッシュにエントリを追加するツールを知っていますか? Windows Server 2003 Resource Kit Tools を使用していますが、そのようなツールが見つかりませんでした...
どんな助けでも大歓迎です!
編集
よし、libcurlを使って欲しいものを作る方法を見つけました。最後に、事前に SSPI で何らかの作業を行う必要があると想定していましたが、curl はそれを適切にサポートしています。
curl は、適切にビルドされたバージョンの curl を SSPI および SPNEGO フラグとともに使用すると、kerberos レルムに対する認証を行い、LSA キャッシュに保存します。
curl.exe を使用してテストする場合、ユーザー名/パスワードとともに--negotiate引数を指定する必要があります。ただし、libcurl を使用する場合は、単に CURLOPT_HTTPAUTH オプションを CURLAUTH_GSSNEGOTIATE を含むもの (CURLAUTH_ANY など) に設定するだけです。私のテストでは、libcurl は予想される Kerberosハンドシェイクを実行しました。
- Web サーバー (web.b.com、B.COM は Web サーバーの kerberos レルム) に接続します。
- WWW-AuthenticateパラメータがNegotiateに設定された、許可されていない応答を受信しました
- libcurl/SSPI は、TGS-REQ を現在のユーザーのドメインのドメイン コントローラー (DC) (A.COM としましょう) に送信します。
- どういうわけか、次の TGS-REQ は Web サーバー (B.COM) のドメイン コントローラーに送信されます。
- ドメイン B.COM の Kerberos チケットを受信し、エントリが LSA キャッシュに追加されます (klist.exe または kerbtray.exe で表示可能)
- libcurl は、認証情報 (GSS-API) を使用して Web サーバーに HTTP 要求を送信します。
ただし、ここに私の新しい問題があります。このハンドシェイクはすべて、現在ログに記録されている資格情報、たとえばuser1@A.COMで行われました。A.COM と B.COM の間には信頼関係があり、私のユーザーはアクセスできるため、機能します。提供された資格情報 ( user2.B.COM ) を使用してログインしたいのですが?
また、現在ログに記録されているユーザーとは異なるユーザーの LSA キャッシュにエントリを追加できるかどうかはよくわかりません??
libcurl がこのユーザーに関連付けられたチケットにアクセスして Web サーバーに認証されるように、ユーザーuser2.B.COMになりすましてこれを機能させるにはどうすればよいですか?
python - SSPIが有効かどうかを確認するpyCurl
pycurl私が理解していることからのデフォルトのビルドはサポートされておらずSSPI、libcurl ~ 7.19 の非常に古いバージョンに対してもビルドされています。だから私は先に進んで、このライブラリの独自のビルドを作成しました。
libcurlマシンに新しいソースをインストールしましpycurlた。バージョン情報により、正しくビルドされていることが確認できます。WINDOWS_SSPI フラグを使用します。
libcurl のバージョンは現在 7.31.0 です。しかし、SSPI が有効になっているかどうかはわかりません。pycurl からバージョン情報を実行すると、私に与えられます。
ただし、SSPI が有効になっているかどうかはまだわかりません。
imap - NTLM 認証を使用して共有メールボックスにアクセスする方法
IMAP を使用して Exchange の共有メールボックスにアクセスしようとしていますが、アプリにパスワードを保存したくないので、NTLM 認証を試します。
SSPI フレームワーク API を使用して認証を行うことができましたが、共有受信トレイを選択するのに苦労しています。
「基本」認証を使用すると、次のことができることがわかっています。
それはうまくいきますが、アプリにパスワードを保存したくないので、NTLM認証を使用しています(メールボックスエイリアスが保存されているexchangeserver1.domain.comに接続します):
現在のコンテキスト ユーザー メールボックスは exchangeserver2 に保存されていますが、共有メールボックスは exchangeserver1 にあるため、NTLM では REFERRAL 部分が表示されますが、上記の両方のシナリオで exchangeserver1 に接続しています。
select「メールボックスエイリアス」と「受信ボックス」を使用してコマンドのいくつかのバリエーションを試しましたが、どれも機能しませんでした。私はメールボックスにアクセスできます。私はその所有者であり、Outlook (ただし、MAPI を使用していると思います) と「基本認証」からアクセスできます。
認証後、共有メールボックスの受信トレイを選択するにはどうすればよいですか?
次の AcquireCredentialsHandle 呼び出しを使用して NTLM タイプ 1 メッセージを生成しています: AcquireCredentialsHandle (null, "NTLM", 2, 0, 0, 0, 0, ref phCredential, ref ptsExpiry)
最初のパラメーター (ユーザー名) を null (現在のコンテキスト ユーザー) から "ドメイン/ユーザー名/メールボックス" に変更しようとしましたが、うまくいきませんでした。
ありがとう :)
kerberos - Kerberos を使用した SPN のしくみ
私が理解しているように、
- SPN は、Windows サービスの認証ツールです。
- Kerberos はユーザー認証サービスです
- SPNEGO-GSSAPI は、これらのサービスを利用できるサードパーティ API です。
- SSPI : SPNEGO から SPN サービスにリクエストを送信するニュートラル レイヤーです。
私は完全に迷っていますか?
それがどのように機能するかを理解しようとしていますが、情報は正確すぎるか、十分ではありません。