これに先立ち、私はこれまでSAMLのことすら聞いたことはなく、それを使ったSSO戦略を開発したことはほとんどなかったと言いたいと思います。それは、私が1年間ほとんどノードをやっていないという事実と相まって、輝かしい初心者サンドイッチになります。現在、SSOプロバイダーとしてSAMLとADFSを使用しているクライアントがいます。すでにローカルログインにpassport.jsを使用しているため、passport-samlを使用してSAML/ADFSを使用してSSOを実装する方法と思われます。私の研究では、いくつかの異なる実装ガイドを見つけましたが、このプロセスについて文字通り何も知らないので、いくつかのポインターを使用できます。
Passport-samlのドキュメントで、ADFSで機能することが証明されている戦略について、次のことがわかりました(ドキュメントによる)。
{
entryPoint: 'https://ad.example.net/adfs/ls/',
issuer: 'https://your-app.example.net/login/callback',
callbackUrl: 'https://your-app.example.net/login/callback',
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==',
identifierFormat: null
}
私の主な質問は、この証明書はどこから来たのでしょうか?これはSSL経由でサーバー上で生成した証明書ですか?プロバイダーは提供していますか?
私の検索では、これも見つけました: https://github.com/auth0/passport-wsfed-saml2 、これはpassport-samlに基づいています。 ADFSには次の構成が推奨されます。
{
path: '/login/callback',
realm: 'urn:node:app',
homeRealm: '', // optionally specify an identity provider
identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation',
cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... ='
}
この例では、パスオブジェクトは明らかであり、プロバイダーは既にプロバイダーURLを提供しています。しかし、レルムは私には意味がありません、そして、そのひどい証明書が再びあります。
Node.jsサイトでSAML/ADFS SSOを実装する「explain-like-i'm-five」の方法を誰かが教えてもらえますか?または、私が概説した2つのソリューションによって要求された引数オブジェクトの先頭または末尾を作成するのに役立ちますか?事前に感謝します!
私は最近同じ思考プロセスを経験しました:[〜#〜] saml [〜#〜]を聞いたことがないので、Webアプリケーションを有効にする必要がありました(Active Directoryの代わりに)IDプロバイダーとしてOneLoginを使用してSAML経由で認証する。
実装中に、私はOneLoginのドキュメントと_passport-saml
_ライブラリを多用しましたが、どちらもお勧めではありませんが、どちらとも提携していません。
私が気づいたのは、混乱が3つあるということです。
(1)SAMLの仕組み、
(2)Nodeでの_passport-saml
_ライブラリの動作、および
(3)アイデンティティプロバイダーの構成方法(OneLogin、Active Directory 、 もしくはそうでないか)。以下は、「5のような説明」の説明に対する私の試みです。
[〜#〜] saml [〜#〜]
セキュリティアサーションマークアップ言語(SAML)は、ユーザーがブラウザーセッションに基づいてログインできるようにするXML標準です。これには多くの機能がありますが、基本的には、より簡単な認証プロセスが可能になります。ユーザーは、ユーザー名とパスワードを使用してフォームを送信するのではなく、ボタンをクリックできます。
SAMLの仕組みはもう少し複雑です。 OneLoginからのこの概要 と、添付の図が役に立ちました:
この図は、次のプロセスを表しています。
Nodeおよび_passport-saml
_
Passport.jsはNodeの認証ミドルウェアです。それには、_passport-local
_のような戦略が必要です。この場合は、_passport-saml
_です。
_passport-local
_戦略はユーザー名/パスワードを使用したPassport認証を有効にするため、 _passport-saml
_ 戦略はブラウザーセッションと設定可能なIDプロバイダー値を使用したPassport認証を有効にします。
_passport-saml
_が私の目的を本当に果たした一方で、そのドキュメントを推論することは困難でした。 OpenIdp IDプロバイダーが非アクティブであり、lotsの構成可能なパラメーターがあるため、構成例は機能しません。
私が気にした主なもの:entryPoint
およびpath
(またはcallbackURL
)。次のことを行うこれら2つだけが必要でした。
entryPoint
は、承認リクエストでリダイレクトするURLです(上記の#2を参照)。path
/callbackURL
は、URL /ルートをNodeに設定します(上記の#3を参照)。重要で価値のある他のパラメーターがたくさんありますが、これら2つだけを使用してSAML SSOを構成することは可能です。
アイデンティティプロバイダーの構成
最後に、SAML承認要求が与えられると、SAML応答の送信先を認識するように、IDプロバイダー自体を構成する必要があります。 OneLoginの場合、それはACS (Consumer) URL
とACS (Consumer) URL Validator
を設定することを意味します。どちらもパスポート用に設定されたpath
/callbackURL
と一致する必要があります。 saml。
(ログアウトおよびその他の機能をサポートするために)他の設定を行うこともできますが、これは最低限の認証です。
概要
元の質問には2つの部分がありました。(1)SAML/ADFS統合の実装方法と(2)高レベルSAML node.js実装ガイド。この答えは、2番目に対処します。
Active Directoryとの具体的な統合に関しては、ADFS IDプロバイダーを使用するようにpassport-samlを構成することと、応答するようにADFSサーバーを構成することの2つの部分があることに留意して、 passport-samlのADFSに関するドキュメント をお勧めしますノードへ。
私はここで間違っている可能性がありますが、https://servername/FederationMetadata/2007-06/FederationMetadata.xml
。
X509Certificateを引き出します。私は同じ問題を抱えており、次にそれを試します。
質問の最初の部分に関しては、証明書はプロバイダーから提供されます。 passport-saml のドキュメントをご覧ください。
アイデンティティプロバイダーのパブリック署名証明書(X.509)を引き出して、PEMエンコーディングにフォーマットするようにしてください。正しくフォーマットされたPEMエンコードされた証明書は、-----BEGIN CERTIFICATE-----
で始まり、-----END CERTIFICATE-----
で終わります。