#author("2024-03-12T17:04:03+09:00","default:irrp","irrp")
#author("2024-03-25T14:14:33+09:00","default:irrp","irrp")
→認証技術

→[[SSO関連]] ←SAML,Keycloakについてはこちら

#contents


*OpenID Connect [#v9f2ce38]
-[[フルスクラッチして理解するOpenID Connect (4) stateとnonce編 - エムスリーテックブログ>https://www.m3tech.blog/entry/2024/03/25/140000]] 2024.3
-[[フルスクラッチして理解するOpenID Connect (3) JWT編 - エムスリーテックブログ>https://www.m3tech.blog/entry/2024/03/12/150204]] 2024.3
-[[フルスクラッチして理解するOpenID Connect (2) トークンエンドポイント編 - エムスリーテックブログ>https://www.m3tech.blog/entry/2024/03/07/130000]] 2024.3
-[[フルスクラッチして理解するOpenID Connect (1) 認可エンドポイント編 - エムスリーテックブログ>https://www.m3tech.blog/entry/2024/03/05/150000]] 2024.3

-[[OpenID Connect と OAuth 2.0 を知りたい - Alternative Architecture DOJO>https://aadojo.alterbooth.com/entry/2023/12/21/000000]] 2023.12

-[[GitHub ActionsとGoogle CloudのOIDCの仕組みを理解する>https://zenn.dev/takamin55/articles/53d732b081ba66]] 2023.11

-[[仕様が読めるようになるOAuth2.0、OpenID Connect 入門 - Speaker Deck>https://speakerdeck.com/authyasan/shi-yang-gadu-meruyouninaruoauth2-dot-0-openid-connect-ru-men]] 2023.10
--[[Auth屋さんと学ぶ 仕様が読めるようになる OAuthとOpenID Connect 入門 - YouTube>https://www.youtube.com/watch?v=NyuaDiEd1ho]] 


-''OpenIDとOpenID Connectは別物''なので注意、略す場合はOIDCと略すのが一般的

-[[OIDCトークンによるAWSの一時的な認証情報の取得方法 | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2023/03/01/aws-sts/]] 2023.2
--AWS STS(AWS Security Token Service)

-[[認証と認可の超サマリ OAuth とか OpenID Connect とか SAML とかをまとめてざっと把握する本>https://zenn.dev/suzuki_hoge/books/2021-05-authentication-and-authorization-0259d3f]] 2021.1

-[[OAuth & OpenID Connect 関連仕様まとめ - Qiita>https://qiita.com/TakahikoKawasaki/items/185d34814eb9f7ac7ef3]] 2016

-[[OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る - Qiita>https://qiita.com/TakahikoKawasaki/items/f2a0d25a4f05790b3baa]] 2016
--[[【第二弾】OAuth 2.0 + OpenID Connect のフルスクラッチ実装者が知見を語る - Qiita>https://qiita.com/TakahikoKawasaki/items/30fbd546935cea914e4f]] 2017

-[[OIDCでSAMLのIdP-initiatedなんとかみたいなことをやりたいみなさん>https://zenn.dev/ritou/articles/9366cc534860e5]] 2022.12

-[[OAuth 2.0 / OIDC を理解する上で重要な3つの技術仕様 - ログミーTech>https://logmi.jp/tech/articles/322822]] 2020
--JWS、JWE、JWT

-[[OpenID Connectのフローや、JWKやPKCEについて解説 - ログミーTech>https://logmi.jp/tech/articles/322839]] 2020


-[[IDトークンが分かれば OpenID Connect が分かる - Qiita>https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06#7-id-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3]] 2016
--JWS (RFC 7515)、JWE (RFC 7516)、JWK (RFC 7517)、JWT (RFC 7519)、ID トークンの説明

-[[なぜOpenID Connectが必要となったのか、その歴史的背景>https://www.slideshare.net/tkudo/openid-connect-devlove]] 2013

-[[認証規格まとめ 2021年版 - OpenID Connect & FIDO と OAuth 2.0 や SAML との違い - RAKUS Developers Blog | ラクス エンジニアブログ>https://tech-blog.rakus.co.jp/entry/20210930/auth]] 2021.9
--&ref(OIDC.png);
--OpenID Connect は SAML の流れも組んでいますが、SAML はその生い立ちから社内ネットワーク1での利用を想定しています。そのため SAML での認証処理はユーザーの同意を必要とせずに処理することができます。認証処理は信頼されているサービスで行われるという前提です。
--SAMLはXMLベース、OIDCはJSONベースという実装上の違い
--FIDO 2.0ではサーバーとクライアントの間でクレデンシャル情報を直接通信することがないことです。FIDO 2.0ではクライアントサイドで認証処理を行なった結果のみをサーバーに送信します。これにより通信経路からのクレデンシャル情報の流出を避けることができます。

-[[CircleCIがOIDCをサポートしたのでAWSと連携させてみた | DevelopersIO>https://dev.classmethod.jp/articles/circleci-supported-oidc-so-i-tried-linking-it-with-aws/]] 2022.3


*OpenID [#l10972c9]
-OpenIDとは「異なるWebサービス間でユーザーの認証情報を受け渡す方法」を定義したプロトコル

-[[OpenIDが果たす役割を知る>http://www.atmarkit.co.jp/fsecurity/rensai/digid03/01.html]] 2012.9.20
-[[OpenID/SAMLのつなぎ方とその課題>http://www.atmarkit.co.jp/fsecurity/rensai/kantara03/kantara01.html]] 2010.1.22
-%%[[OpenIDの襲来に備えよ!>http://koress.jp/2007/10/openid.html]]%%
-[[mixi OpenID>http://developer.mixi.co.jp/openid]]
--[[mixi OpenIDの技術面を解説するでござるの巻>http://d.hatena.ne.jp/ZIGOROu/20080820/1219218753]] 2008.8.21


*OAuth [#uba57a1b]
-OAuthは認可の仕様であって認証の仕様ではない
-OAuth 2.0ではIDトークンは規定されていないので「誰についての認可コードなのか」はわからない(OAuth 2.0の外で認証は行う前提)

-[[図解+手を動かして理解する!OAuthの仕組み #OAuth - Qiita>https://qiita.com/y-mae/items/c405ded1b71dee68f335]] 2023.11

-[[[前編] AWS CDKで API Gateway + Lambda 構成のREST APIを構築して Auth0 + Lambda Authorizerの認可機能を導入してみた | DevelopersIO>https://dev.classmethod.jp/articles/aws-cdk-api-gateway-lambda-rest-auth0-lambda-authorizer/]] 2023.3
--[[[後編] AWS CDKで API Gateway + Lambda 構成のREST APIを構築して Auth0 + Lambda Authorizerの認可機能を導入してみた | DevelopersIO>https://dev.classmethod.jp/articles/aws-cdk-api-gateway-lambda-rest-auth0-lambda-authorizer-part-2/]] 2023.3

-[[KotlinとSpring Security 6.xを使って、Introspection Endpointでトークンを検証するOAuth2のリソースサーバ−を実装する | DevelopersIO>https://dev.classmethod.jp/articles/kotlin-spring-security-6-x-oauth2-token-introspection/]] 2023.3

-[[OAuth2.0認証クライアントを自前実装で導入してみる【SolidStart+OAuth2.0+Box】 - RAKUS Developers Blog | ラクス エンジニアブログ>https://tech-blog.rakus.co.jp/entry/20230220/oauth]] 2023.2

-[[Python でシンプルに OAuth 2 する (urllib + oauthlib) - Qiita>https://qiita.com/hoto17296/items/2d2cb76d323099e9f8ab]] 2020

-[[最近話題の API の認証ってなに? ~OAuth編~>https://gblogs.cisco.com/jp/2021/09/whats-oauth/]] 2021.9
--2点の問題「セキュリティ問題」と「ユーザー制約問題」を解決
--セキュリティ問題:アプリケーションから別サイトのリソースへアクセスしたい場合、別サイトの認証情報をアプリケーション側へ共有する必要があった
--ユーザ制約問題:各アプリケーションからの要求に対して異なるアクセス制限を適用する事ができなかった
--OAuthによってこれらの問題が解決した

-[[OAuthで登場する概念の説明(ロール、トークン、エンドポイント) | bbh>https://bbh.bz/2020/11/16/oauth-description-of-the-component/]] 2020.11
--ロール … OAuthにおける役割。リソースオーナー、クライアント、リソースサーバー、認可サーバーなど
--リソースオーナー … リソース(画像)の所有者であり、サードパーティ製のアプリの使用者
--クライアント … サード―パーティ製アプリ。サーバーサイド、ネイティブアプリかは問わない。
--リソースサーバー … リソースを提供するサーバー。この例だとGoogleDriveのデータがあるサーバー。
--認可サーバー … クライアントの認可を行うサーバー。リソースサーバーと同じ組織が運営。(この例だとGoogle)
--トークン … 認可されたことを証明するもの

-[[【供養】OAuth をステートレスに出来るかも!と思ったけど、出来なくない? - Qiita>https://qiita.com/kyamamoto9120/items/e2ab7b0c95d8afb336bf]] 2022.7

-[[Firebase Auth の力を 120% 引き出すためのハック集>https://zenn.dev/ubie/articles/firebase-auth-hack]] 2022.4

-[[GitHub の OAuth 実装の仕様違反とセキュリティ上の考慮事項 - Qiita>https://qiita.com/TakahikoKawasaki/items/f1905f6a346f6ecc524f]] 2022.4

-[[「Googleでログイン」「Facebookでログイン」などのOAuth認証を模倣してパスワードを盗み出す手口が考案される - GIGAZINE>https://gigazine.net/news/20220322-oauth-phishing-site/]] 2022.3
--mr.d0x氏はこの手口を「Browser In The Browser(BITB)攻撃」と名付け、「わずかな違いに気付く人はほとんどおらず、基本的に本物と区別できなくなります」と述べています。

-[[OAuth 2.0 クライアント認証 - Qiita>https://qiita.com/TakahikoKawasaki/items/63ed4a9d8d6e5109e401]] 2019

-[[「OAuth」の基本動作を知る>http://www.atmarkit.co.jp/fsecurity/rensai/digid01/01.html]] 2012.8.
 ひと言でいうとOAuthは、
 あるサービス(サービスA)上にエンドユーザーが所有するリソースや、そのエンドユーザーがアクセス権限を持つサービスAの各種機能に対し、
 エンドユーザーの許可を受けたほかのサービス(サービスB)がアクセスするために
 エンドユーザーがサービスBに対して許可を与え
 サービスBがサービスAの提供するAPIにアクセスする際に許可を受けていることを証明する
 という一連のフローを、セキュアに実現することを目的とした「アクセス権限の付与」のためのプロトコルです。

-[[WebアプリにSNSアカウントでのログインを実装する >http://codezine.jp/article/detail/6572]] 2012.6.2
--OAuthによる認証

-[[一番分かりやすい OAuth の説明 - Qiita>https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be]] 2017

-[[OAuthについて>http://www.machu.jp/diary/20070925.html#p01]]
--OAuth は,第三者に対して,認証を要求するリソースへのアクセスを一時的に許可するためのプロトコルです.

-[[OAuth 2.0 — OAuth>https://oauth.net/2/]]


* OAuth認可フロー(OIDCでも共用) [#r45f1956]
-RFC6749 に記載された4つの認可フロー
--1. 認可コードフロー
--2. インプリシットフロー(※通常使うべきではない)
--3. リソースオーナー・パスワード・クレデンシャルズフロー(※通常使うべきではない)
--4. クライアント・クレデンシャルズフロー(ユーザーが絡まないフロー。クライアントに対してアクセストークンを発行する)

--5. リフレッシュトークンフロー(※期限が切れたトークンを更新するためのフロー)


-[[OAuth 2.0のフローの種類と2つのエンドポイントについて解説 - ログミーTech>https://logmi.jp/tech/articles/322829]] 2020
--認可サーバーは基本的に2つのエンドポイントを提供します。その2つは、認可エンドポイントとトークンエンドポイント

-[[OAuth 2.0 全フローの図解と動画>http://qiita.com/TakahikoKawasaki/items/200951e5b5929f840a1f]] 2017.4.28


**リソースオーナー・パスワード・クレデンシャルズフロー [#we8caf18]
-[[Password Grant - OAuth 2.0 Simplified>https://www.oauth.com/oauth2-servers/access-tokens/password-grant/]] 2022.11
-[[How can I use the grant_type=password oauth flow with salesforce.com? - Stack Overflow>https://stackoverflow.com/questions/10890467/how-can-i-use-the-grant-type-password-oauth-flow-with-salesforce-com]] 2012
-[[Call Your API Using Resource Owner Password Flow>https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-resource-owner-password-flow]] 2022.12



*Amazon Cognito [#pbb6ed7e]
→AWS IAM関連

-[[StreamlitとCognitoを使ってログイン機能を実装してみた - REVISIO Tech Blog>https://tech.revisio.co.jp/entry/2023/09/27/121859]] 2023.9

-[[Amazon Cognitoを、CloudFormationで作って簡単に使ってみる - サーバーワークスエンジニアブログ>https://blog.serverworks.co.jp/create-simplecognito-with-cloudformation]] 2023.8

-[[Keycloakの知識を背景に、AWS Cognitoを調査してみて感じたこと - Linkode.TechBlog>https://blog.linkode.co.jp/entry/2023/08/23/090000]] 2023.8

-[[CognitoのHostedUIがダサいのでChatGPTにCSSを作ってもらう - Qiita>https://qiita.com/Nazuna_Nyanmage/items/315d3ccad5f7d1b4b115]] 2023.6

-[[Amazon Cognitoについてまとめてみた - Qiita>https://qiita.com/sasshillc/items/7dd0111c1de761b0bf66]] 2023.2

-[[Why we decided to use Auth0 and not AWS Cognito | by Ryoichi Sekiguchi | Oct, 2022 | Shippio>https://techblog.shippio.io/why-we-decided-to-use-auth0-and-not-aws-cognito-20d8b87a9996]] 2022.12

-[[AWS Cognitoのエンドポイントを使いこなす - Qiita>https://qiita.com/poruruba/items/a284b9f522d8d6e1e3f9]] 2018
--OpenID Connectでは、以下の4つのアクセス権限付与フローが定義されています。
---Authorization Code Grant
---Implicit Grant
---Resource Owner Password Credentials Grant
---Client Credentials Grant
--これってOAuthの認証フローと被る?→OIDC はOAuth も統合した仕様であるため。

-[[Cognitoのサインイン時に取得できる、IDトークン・アクセストークン・更新トークンを理解する | DevelopersIO>https://dev.classmethod.jp/articles/study-tokens-of-cognito-user-pools/]] 2018
--各トークンの主な用途
---IDトークン:連携サービスの認証(例:API Gateway)と認証されたユーザー情報の参照
---アクセストークン:Cognitoユーザープールのユーザー属性更新
---更新トークン:新しいIDトークン、アクセストークンの取得

-[[AWS Cognitoを導入し、認証画面を作成してみた! - Qiita>https://qiita.com/ps-uema/items/53fc5c8f69e037f0b98e]] 

-[[AWS再入門ブログリレー2022 Amazon Cognito編 | DevelopersIO>https://dev.classmethod.jp/articles/re-introduction-2022-amazon-cognito/]] 2022.3
--Amazon Cognitoとは、ウェブアプリケーションやモバイルアプリケーションに「認証(Authentication)」、「認可(Authorization)」、「ユーザー管理」を簡単に実装することが可能なサービスです。


* JWT(JSON Web Token) [#i9a14819]
-[[Java で Azure App Service の Azure AD 認証の JWT からユーザー情報を取得してみた - Qiita>https://qiita.com/mnrst/items/e1781d41b014250834c3]] 2023.1
-[[Auth0 java-jwtを使った素のJWT認証 | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2022/12/10/java-jwt-auth/]] 2022.12
-[[基本から理解するJWTとJWT認証の仕組み | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2022/12/08/jwt-auth/]] 2022.12

-[[マイクロサービスの認証・認可とJWT / Authentication and Authorization in Microservices and JWT - Speaker Deck>https://speakerdeck.com/oracle4engineer/authentication-and-authorization-in-microservices-and-jwt]] 2021

-[[【JWT】 入門>https://qiita.com/Naoto9282/items/8427918564400968bd2b]] 2021.3


* 参考資料 [#g4048ba3]
-[[APIにリクエストを投げたい(VSCode REST Clientの紹介) - Qiita>https://qiita.com/mgmgmogumi/items/61f0b896580d3e6db2bb]] 2022

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS