私が現実的な例を研究することから、SAMLについて学んだ5つのもの


私は最近、Aの実行トレースを掘りましたsaml-rails example app 使用AppMap extension for VSCode , コードの“興味のポイント”を探しています.ここでは、私はSAMLについて学び、どのようにSAMLを現実的なアプリケーションに統合する5つの興味深いものです.
注意:このポストのコードスニペットは簡潔に編集されます.フルソースの場合は、リンクをクリックします.

1 ) SAML認証リクエストは複雑です.
WebサイトがSAMLでユーザをログインしたい場合は、特別にエンコードされたAuthパラメータを含むHTTPリクエストを送信します.Authパラメーターはbase64 encoding of an XML document . 次のようなコードを使用して構築します.
  request_doc = create_authentication_xml_doc(settings)
  base64_request = encode(request)
  request_params = {"SAMLRequest" => base64_request}
XMLドキュメントにはa few required parameters, and many optional ones .
現実世界のシナリオでは、すべてのこれらのパラメータの詳細については、アプリケーションの要件を確認すると、SAMLベンダーDOC、およびSAML仕様が重要になるだろう.Other resources confirm SAML設定の複雑さについての私の直感.

2 .ユーザのHTTPログイン要求はredirected to the SAML provider
一旦Base 64 - ED Auth要求が前のステップでつくられるならば、要求はSAMLプロバイダーにリダイレクトされます.
エンコードされたデータはSAMLRequest パラメータURLは以下のようになります.
https://idp.samlprovider.com/saml-login?SAMLRequest=fZAxb8MgEIX%2FijcmbIwdKTnFlqxmiZQuSduhS0QwjVExUA5X7
言うまでもないが、SSLはプロセス全体に不可欠である.

3 . SAMLレスポンスはverified using a certificate
The saml_callback response 指紋とデジタル署名を含みます.あなたのアプリケーション(SAML SHOWの「サービスプロバイダー」)は、SAMLアイデンティティプロバイダーの証明書公開鍵を使用してログイン応答を確認します.

アプリケーションは、SAMLログインに応答して動的にユーザレコードを作成することができます
SAML Responseが受信されて、確かめられるとき、それはアプリケーション(「サービスプロバイダ」、覚えていると予想されます?)意志find-or-create a user record

5章user IDは通常通り、セッションに格納されます
ユーザレコードが作成されると、ユーザIDはstored the in the session , 他のログインフローのように.これが他の、より複雑な認証の形式と比較してSAMLと変わらないことを知るのは良いです.
ユーザの次のリクエストでは、ユーザIDはretrieved from the session . ユーザIDはデータベース内のユーザレコードを検索するために使用され、要求は継続する.
ここにいる間
調査を実施していますState of Software Architecture Quality . 我々は300の応答を目指しています、そして、一旦我々が我々のゴールに会うならば、我々はコードに女の子に1000ドル寄付しています.調査を埋めることによって、ソフトウェアのアーキテクチャの品質の理解に貢献してください!もちろん、我々は彼らが利用可能であるならば、結果を要約して、発表しています.
調査に記入したくないのであれば、結果が利用可能なときに通知したい場合は、次のように入力します.https://forms.gle/u8CPS3GGD6A7WHsG7 .

資源
  • 良い文章SAML for web developers .
  • enterprise-oss/saml-rails repo .
  • The AppMap extension for VSCode , and installation instructions for Ruby and Java .
  • Repoについての私のブログの投稿は、AppMapsを使用して実行トレースを探索することができます.