Open6

SSO周りのメモ

ゆーとゆーと

SSO(シングルサインオン)は、ユーザーが複数のシステムやアプリケーションにアクセスする際、一度のログイン操作で済ませることができる認証方式。
SSOを利用することで、ユーザーは異なるサービスを利用するたびにログイン情報を入力する必要がなくなる。

ゆーとゆーと

メリット

  • 承認を一元化することで管理が楽に。
    複数サービスでそれぞれログインとかが不要になる。→逆に言えば、数個ぐらいのサービスしかない場合は必要?
    セキュリティ面やログの管理観点でも、統一できた方が良さそうではある。
ゆーとゆーと

認証方法(認証技術)については、以下のようなものが代表的みたい。

  • SAML認証(フェデレーション)方式
  • 代理認証(フォームベース)方式
  • リバースプロキシ方式
  • エージェント方式
  • 透過型方式

https://www.ogis-ri.co.jp/column/themistruct/c106480.html

記載以外だと、以下の方式が気になるので要確認。

  • OpenID Connect(OIDC):
    OIDCはOAuth 2.0プロトコルをベースにした認証レイヤーです。よりシンプルなJSON/RESTベースの交換を可能にし、ウェブアプリケーションはもちろん、モバイルアプリケーションでも広く利用されています。
  • OAuth 2.0:
    OAuth 2.0は、第三者アプリケーションがユーザーの代わりにリソースサーバー上のリソースにアクセスするための許可を得るためのフレームワークです。OAuth自体は認証プロトコルではありませんが、OIDCと組み合わせることで認証情報の共有が可能になります。
  • JWT
ゆーとゆーと

SSOを導入するにあたり、システム同士の連携は可能か?は要確認。
外部のSaaSを使用する場合は特に。

自前のサービス同士を連携させる場合はおおかた大丈夫そう?

  • 自前の認証サーバーがOAuth 2.0やOpenID Connectなどの標準プロトコルをサポートしていることは要確認。
  • モバイルアプリからのリダイレクトURIを認証サーバーに登録し、認証が成功した後にユーザーがアプリに戻れるようにする必要ある?
ゆーとゆーと

モバイルアプリとwebとでSSOを実装する場合は実現可能?

ざっと調べた感じ、モバイルからWebへ遷移するさいに、URLのやり取りによってトークンの取得ができそうなので、実現はできそう?以下例。
https://www.flutter-study.dev/create-app/qiita-app

上記外の参考になりそうなサイト:
https://medium.com/@tanabold2/flutter-mobile-sso-via-open-id-connect-7670d98cf769
https://zenn.dev/joo_hashi/articles/7887a9348ca244
https://zenn.dev/motu2119/articles/a70b611329d133
https://www.miniorange.com/iam/integrations/flutter-single-sign-on-sso

ゆーとゆーと

モバイルアプリ間でSSOは実現可能?

ディープリンク機能で実現は可能そう?

  • 元アプリからディープリンクで先アプリへ遷移。遷移時のURLに元アプリへ戻るための情報をもたせる?
  • 先アプリでログイン。
  • ログイン後に、先アプリに組み込まれたディープリンクから、元アプリへ戻る。この時のディープリンクのURLに認証トークンを引っ付ける。(コールバックURL的な?)

上記をFlutterのライブラリで実現できるのかは要検討。url_lancherとかで。

参考になりそうなリンク:
https://dev.classmethod.jp/articles/flutter-cognito-screen-switch/
https://iret.media/85152
https://note.com/matsushima200/n/n9960a4a1747b