LoginSignup
0
0

SSOに関するメモ

Last updated at Posted at 2024-05-19

目的

業務でSSOについての知識が必要になったが、雰囲気しか理解してなかったので
まとめておく

SSOって何?

  • 一度の認証で複数のシステムやサービスにログインできる仕組み

SSOは何がうれしい?

  • サービスごとに異なるパスワードを覚えて、ログインして...みたいなことを考えなくてよくなり
    パスワード管理の負荷が軽減される。またパスワードの使いまわしをなくしセキュリティを強化できる

SSOの仕組み

登場人物

  • IdP(ID Provider):認証情報を提供する側
  • SP(Service Provider):IdPの提供する認証情報を利用しサービスを提供する側

SSOを実現する方法

  • エージェント方式
    • SPであるWebサーバに認証用のエージェントソフトをインストールする方式
    • エージェントからの認証情報をもとにSSOサーバが認証を行う
    • SP側の構成がかわるので社内システムやサービス提供側で実装する際の方式

エージェント方式による認証の仕組み

  1. ユーザーがサービスAにアクセスし、ユーザーIDとパスワードを入力

  2. サービスA上のエージェントがサービスAに代わり、SSOサーバーに対し下記2点を確認

    • ユーザー本人であるか
    • ユーザーがサービスAへのアクセス権限を持っているか
  3. SSOサーバー側で認証情報を確認し内容に問題なければ、エージェントからユーザーに「認証済Cookie」を送信、サービスAの利用が可能

  4. ユーザーが別のサービスBにアクセス

  5. サービスB上のエージェントが、SSOサーバーに下記を確認

    • ユーザーがサービスBへのアクセス権限を持っているか

    • ※ユーザー本人であることは「認証済Cookie」があるため確認しない

  6. SSOサーバー側で情報を確認し内容に問題なければ、サービスBの利用が可能

  • リバースプロキシ方式
    • SPであるWebサーバの前段にリバースプロキシサーバーを設置し、リバースプロキシサーバーで認証を行う
    • SP側の構成がかわるので社内システムやサービス提供側で実装する際の方式

リバースプロキシ方式による認証の仕組み

  1. ユーザーがサービスAにアクセスしようとすると、リバースプロキシサーバー経由でのアクセスとなり、認証画面が表示されるためユーザーIDとパスワードを入力

  2. リバースプロキシサーバー側で認証情報を確認し、内容に問題なければ、リバースプロキシサーバーからユーザーに「認証済Cookie」を送信、サービスAの利用が可能

3.ユーザーがサービスBにアクセスしようとすると、リバースプロキシサーバー経由でのアクセスとなり、リバースプロキシサーバー側で「認証済Cookie」の情報を確認できればサービスBの利用が可能

  • 代理認証方式
    • 代理認証用のエージェントがユーザーの代わりにIDとパスワードを送信してログインを完了させる方式。
    • SP側でなく、サービス利用者側でSSOを実現する方式

代理認証方式による認証の仕組み

ユーザーの端末に導入したエージェントの認証をSSOサーバーで実施

認証に問題なければ、SSOサーバーからエージェントに対し、ユーザーが利用している各サービスのID・パスワード情報を送信

ユーザーがサービスにアクセスすると、エージェントが代理でID・パスワードを自動入力し、サービスの利用が可能

  • フェデレーション方式

    • 異なるドメインのサービスでも認証情報を連携できる方法
    • フェデレーション方式では、パスワードではなく「チケット」と呼ばれる情報をユーザーとIdP(Identity Provider)がやり取りし、認証を行う
    • IdPとSP間で事前に信頼関係を構築し、IdPで認証された証を持って、SPへのアクセスを許可する
    • SAMLやOpen ID Connectなどのプロトコルで実現される
  • 透過型方式

    • 比較的新しい方式らしく、あまり情報がなかった...
    • 詳しい人いたら教えてほしい

参考リンク

https://hogetech.info/security/sso/federation
https://www.ogis-ri.co.jp/column/themistruct/c106480.html
https://www.hitachi-solutions.co.jp/iam/sol_signon.html

SAMLによるSSOをFlaskアプリで実装してる方がいた。
https://thinkami.hatenablog.com/entry/2024/02/12/230830
https://developer.okta.com/code/python/pysaml2/
 IdP:Keycloak
 SP:Flaskアプリ
という構成。

https://www.keycloak.org/
KeycloakというのはID管理のためのオープンソースソフトウェアらしい。

上記のサイトに従ってコードを動かして、Keycloakの設定もしてみたが、
Keycloakの認証画面に飛ぶ際にInvalid Redirect Uriとなって認証画面に到達できなかった。
Keycloak側の設定の問題かもしれない。
Keycloak以外のIdPでのSAML認証も試してみたい。が、あんまり日本語のドキュメントがないのがつらみ。

Azure AD(現在はMicrosoft Entra ID)でSAMLを使ったSSOについては以下が参考になりそう。
https://learn.microsoft.com/ja-jp/entra/identity/enterprise-apps/add-application-portal-setup-sso
https://youtu.be/glZuiP8mjnA?si=_fUsK0PthI7fDYSe

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0