🌊

シングルサインオンの実装手法をまとめてみた

2023/05/29に公開

はじめに

今回は、AWS(Amazon Web Services)をWebAPI、Webアプリとして利用して、AndroidアプリケーションとiPhoneアプリケーションで、シングルサインオンができるシステムの開発をZennを通して配信していこうと思います。
このシステム開発にあたり、それぞれのプラットフォーム毎に弊社内のメンバーを1人ずつアサインし、3人チームで実施してまいります。

それぞれのプラットフォーム毎に、各々のZennから配信していきます。
配信の様子は以下のURLからチェックをお願いします。

プラットフォーム 担当者
WebAPI(AWS)+Webアプリ https://zenn.dev/toraiti
iPhoneアプリ https://zenn.dev/tns_00
Androidアプリ https://zenn.dev/dsuzuki

第一回目の配信テーマ

それぞれのメンバーで実装方法を模索し調べた内容を発信すること、開発環境構築することが配信テーマとなります。
配信後、どの実装方法で行うかメンバーで相談し、最終決定していこうと思います。

シングルサインオンとは

シングルサインオン画像
画像出典 : シングルサインオン(SSO)とは | OSSのデージーネット(https://www.designet.co.jp/)
シングルサインオン(Single Sign-On)とは、一度の認証(ログイン)で他の関連するシステムなどに追加で認証が必要なく利用可能なシステム・ツールのことを指します。
シングルサインオンを使用しているシステムの例をあげると、楽天などがあげられます。
初回ログイン認証で楽天市場や楽天ブックス、楽天トラベルなどの関連サイトへログイン認証不要で利用可能になります。
シングルサインオンを導入することで、利用者側としてはそれぞれのサイトのログイン情報を記録する必要なく、運営側としては関連システムへのマーケット拡大などがしやすくなります。

シングルサインオンの実装手法

SAML認証方式

SAML認証方式
Security Assertion Markup Languageの略で、インターネットドメイン間でユーザー認証を行なうためのXMLをベースにした標準規格の総称です。
アクセスされたWebサイトやアプリ(Service Provider)からSAML認証情報を送信、認証基盤(Idenitity Provider)でログイン画面等を表示しログインを行い、結果をWebサイトやアプリに返却することでログインができる仕組みです。
統一的なIDやパスワードでログイン可能なため、データ構造が簡略化できるのが特徴です。

代理認証方式

代理認証方式
ユーザがログインを行おうとしている動作を検知して、ユーザーの代わりに事前に取得したIDとパスワードを送信し、ログインを完了させる仕組みです。
代理認証サーバにエージェントというソフトウェアの導入が必要となりますが、それぞれのシステムで統一的なIDやパスワードを持つ必要がなく、後から容易に導入できるのが特徴です。

エージェント方式

エージェント方式
事前に認証サーバから発行されたSSOトークンを用いて、アプリケーション内のエージェントを介してログインする方式です。
各々のWebサーバーやアプリケーションサーバーに専用のエージェントをインストールする必要があります。
エージェントが対応している場合、ネットワーク構成を変更せずに導入できることが特徴です。

リバースプロキシ方式

リバースプロキシ方式
事前に認証サーバから発行されたSSOトークンを用いて、リバースプロキシサーバ内のエージェントを介してログインする方式です。
リバースプロキシサーバを設置する必要がありネットワーク構成の変更が必要ですが、各々にエージェントの導入が不要なため、複数のWebシステムがある場合でも展開しやすいことが特徴です。

OpenID Connect方式

SAML認証と大まかな動きが一緒ですがOAuth 2.0ベースで、JSON Web Tokenを使用して認証する点などの違いがあります。
細かい説明は省きますが、SAML認証はユーザ(画面遷移)などによる問い合わせメインで、SPとIdp同士の通信は行いませんが、OpenID ConnectはSPとIdp同士の通信があったりします。

ケルベロス認証方式

事前に認証サーバから発行されたTGT(Ticket Granting Ticket)を用いて、有効期限内であれば該当サーバーへアクセスするためのチケットが発行され、ログインが可能になる方式です。
チケットが盗み見られるとフィッシング被害に合いやすいが、Windows Active Directoryに用いられていることからWindowsの社内システムの認証によく使用されていることが特徴です。

総括

現在、一般的に普及しているSAML認証方式や代理認証方式は多くの製品が登場しております。
アプリケーション開発においては、それらの製品を使用することが多く、具体的な方式を知る機会は限られていたため、よい機会になったのではないかと思います。
シングルサインオンを一から実装するのは初めてですので、ベターなSAML認証方式で進めていきたいと考えています。
アーキテクチャ設計やAPI設計などを行ってからモノ作りを始めますので、長い道のりになりそうですが最後まで続けられたらと思います。
参考サイトから雑多にまとめた投稿でしたが、最後まで読んでくださった読者の皆様、ありがとうございました。

※正しく理解できていない箇所がある可能性があるため、後日更新する可能性があります。ご了承ください。

参考サイト

https://techblog.yahoo.co.jp/web/auth/id_federation_impl_patterns/
https://trustlogin.com/sso/
https://www.splashtop.co.jp/knowhow/25/
https://www.sso-introduce.net/structure/agent.html
https://www.sso-introduce.net/structure/proxy.html
https://www.lrm.jp/security_magazine/kerberos-auth/

GitHubで編集を提案

Discussion