社内向け勉強会で発表した内容です。 30分でと書いてありますが、実際には50分かかりました。 また時間の関係で結構省いたりしている箇所があります。 2020/07/19追記 ご指摘をいただいた箇所を多々修正いたしました。 特にOIDCとSPAの章が初版とは大幅に変更されていますのでご注意く…
![30分でOpenID Connect完全に理解したと言えるようになる勉強会](https://cdn-ak-scissors.b.st-hatena.com/image/square/95e3528908054a76e927d333d6d32375d471a3e6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F6ecca160c67b47c4a457e4ccb9e5665b%2Fslide_0.jpg%3F15867731)
PONOS Advent Calendar 2020の3日目の記事です。 昨日は@e73ryoさんのScriptableWizardからコンポーネントとプレハブを同時に作成する例でした。 はじめに Firebase Authenticationを利用すると簡単にアプリに認証機構を導入できます。 一時的な匿名認証の他、一般的なパスワード認証、さらにGoogleアカウントやFacebookログイン等を簡単に導入することができます。 Firebase Authenticationでは大まかに三つの挙動を上げることができます。 1. サインアップ(アカウント作成) 2. サインイン 3. アカウントを他の認証にリンクする 今回はこれらの認証を呼び出した時の状態変化がどうなるかを検証してみたいと思います。 また、ここでは具体的な実装方法は省略いたします(Firebaseのドキュメントをみてね)。 こ
2022年2月追記 Firebase SDK v9では、実装方法が大きく変わりました。 v9を利用した認証の実装については、以下をご覧ください。 Authenticationを利用した実装 前回 に続き、 Firebase の備忘録を書いていきます。 今回はFirebase Authenticationを利用した認証システムの実装についてメモを残しておきます。 Firebase Authentication の設定 認証は、Firebase プロジェクトのコンソールから「Auhentication」を選んで設定していきます。 公式ドキュメントは以下。 ここでは、サンプルアプリで利用したGoogle 認証に絞って記述します。 Google 認証の設定 Authentication → Sign-in methodを選び、設定を「有効」に変更→保存で、終了。 Google認証の実装 Fireb
概要 GoogleのFirebaseにおける機能の1つ、「Firebase Authentication」の利用方法についてのメモ書きです この機能を使うと、ユーザー認証機能を簡単に実装することができます 技術についての概要は、公式(Google)から提供されているWebページや字幕付き動画などをご覧ください 一番基本的な「ポップアップで認証画面を表示する」パターンしか使用していませんので、より高度な機能を利用したい場合は、Google Firebaseの公式ドキュメントを参照してください 実際の操作手順 Firebaseでプロジェクトを作成します Webサイト上でプロジェクトの画面に移り、どの認証(ログイン方法)を追加したいかを選択する画面まで移動します 具体的には、https://console.firebase.google.com/project/<プロジェクト名>/authent
※途中の説明をだいぶ端折っています。細かいところは追って追記するのでひとまずは「これでCognitoにログインできるんだな」って感じで思っといてもらえれば AWSが提供しているサービスにCognitoという認証基板があって、それと接続するためのboto3というPython製のバックエンド向けSDKがあるのですが、SRPという方式を採用しているにもかかわらず署名計算は自分で行わないといけなかったので備忘録的に ちなみにフロント向けライブラリ(Amplify)には対応しているみたいなので、あくまでも「自前の認証基板とCognitoを接続したいよ」と言った人向けの内容となります。 ざっくり、SRPってのはSecure Remote Passwordの略で、パスワードを通信路に流さずに認証してしまおうって感じのやつです。 認証フロー SRPの認証フローはこんな感じ 認証リクエストを投げて、そのレス
「Cognito IDプールってやつはAWSリソースへのアクセスを制御する認可部分を担当しているらしいけど、いったいどういう理屈でそうなってるんだ…?」 そんな自分の疑問からAWSのドキュメントを読み実際に手を動かして得られたCognito IDプールに対する理解をまとめました。 「Cognito IDプールってやつはAWSリソースへのアクセスを制御する認可部分を担当しているらしいけど、いったいどういう理屈でそうなってるんだ…?」 そんな自分の疑問からAWSのドキュメントを読み手を動かして得られたCognito IDプールに対する理解を、 AWS CLIで再現できる形にまとめてみました。 Cognito IDプールでAWSの一時クレデンシャルキーを発行することによって、Cognito IDプールの世界からIAMの世界へ落とし込めると、だいぶイメージが付きやすいんじゃないかと思います。 AW
基本的な API と機能の理解 Cognito ユーザープールの低レベル API に対応する boto3 のインターフェースを直接操作し以下のようなことを実行することにより、Cognito ユーザープールにおける認証の流れや利用法を理解してみる サインアップ MFA ありのサインアップについては後ほど扱う サインイン 基本的なフローについてそれぞれ確認 オプションや連携のバリエーション: MFA/Facebook, Google ソーシャルサインイン/Login with Amazon/Sign in with Apple/SAML IdP/OIDC プロバイダー経由のサインインについては後ほど扱う ユーザー/ユーザー属性の取得・変更 パスワード変更 パスワード再設定 トークンの更新 基本的に SignUp API を叩いてアカウントを登録し、ConfirmSignUp API にてサイン
OpenID Connectでは、以下の4つのアクセス権限付与フローが定義されています。 Authorization Code Grant Implicit Grant Resource Owner Password Credentials Grant Client Credentials Grant これらは、AWS Cognitoにある以下の5つのエンドポイントを組み合わせて実現します。 認証エンドポイント (/oauth2/authorize) ユーザーをサインインさせます トークンエンドポイント (/oauth2/token) ユーザーのトークンを取得します。 ログインエンドポイント (/login) ユーザーをサインインさせます。ログインページにロードされ、ユーザーにクライアントに設定されている認証オプションを提示します。 ログアウトエンドポイント (/logout) ユーザーを
この記事で紹介する暗号技術一覧 以下の暗号技術をJavaの標準ライブラリで扱う方法をまとめました。 各暗号技術について簡単に説明し、実装例を紹介します。 対称暗号(AES) 公開鍵暗号(RSA) 一方向ハッシュ関数(SHA-256) メッセージ認証コード(HMAC) デジタル署名(RSA + SHA-256) Diffie-Hellman鍵交換 PBE -Password Based Encryption- 実装例で使用するアルゴリズムをカッコ内に記載しています。 対称暗号 対称暗号とは 対称暗号はメッセージの機密性を守るための技術です。 以下の特徴があります。 暗号化と復号の鍵が同じ 公開鍵暗号と比べて処理速度が速い 対称暗号の使い方 鍵の生成 対称暗号の鍵(共通鍵)の生成方法です。 public SecretKey generateKey() throws NoSuchAlgorith
トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べたAPIOAuthWeb TL;DR HTTP でトークンを利用した認証・認可をする手法として RFC 6750 がある OAuth に限らず、トークンを利用して認証・認可する機構の一部として Authorization: Bearer ヘッダを使うことができる 使い方について詳しくはこの記事の下のほうに書いた 要求 トークンを利用した認証・認可機構を持つ API を作りたい クライアントがトークンを HTTP リクエストに含めて送信し、サーバはトークンを検証してリソースへのアクセスを許可したい Authorization: Bearer トークン ヘッダでトークンを送る API あるよね、ああいうやつ 疑問 Authorization: Bearer ヘッダは OA
Cognito Federated Identities と、Cognito User Pools の Federation とは別の機能です。 よくあるユースケースとして、Cognito User Pools のユーザーに対して API Gateway の認証必須 API を呼び出せるようにするというものがあると思いますが、その場合は、Cognito User Pools を Cognito Federated Identities の認証プロバイダとして登録する必要があります。 ですが、今回は API Gateway の API ではなく、独自サーバーの API なので、Federated Identities は不要です。 2018/04/27追記 API Gatewayの機能でAPIのエンドポイントに対して Authorization: COGNITO_USER_POOLS を設定
認証方式の選択 Webの認証方式では、OpenID Connectを使う、というのが(Googleの実装などを見ても)ベスト・プラクティスのようですが、皆さん、実際にはどうしてらっしゃるでしょうか。 僕は、Springをサーバサイドで愛用しているのですが、SpringのRestサーバ機能では、まだOpenID connectは実装されていないようです。 セキュリティは安全な方式を選択すべき一方で、サポートされているものから選ぶしかないという現実もありますね。 最も簡単な認証として、未だに広くは、ユーザ登録時に振り出した固定のシークレットキーをそのままGET/POST時に送信する、というシステムも多いようですが、リプレイ攻撃に対しては変化するキーのほうがベター、ということで今回は、Spring Boot(Web service/security)のOAuth2.0機能を利用して、一時的なセッ
Spring Security OAuthで認可コードグラントフローを体感しよう -第1回:OAuth 2.0のおさらい編JavaOAuthspringSpringBoot 今回から数回(たぶん3〜5回位)にわけて、Spring Security OAuth(+Spring Boot)を利用してOAuth 2.0の認可コードグラントフローを利用したREST APIの認証・認可を実現する方法を説明します。といいつつ・・・わたしもOAuth 2.0に詳しいわけではないので・・・間違った説明があるかもしれません(悪しからず・・・) 間違った説明があったら是非コメント(修正リクエスト)をお願いします!! で、第1回の今回は・・・OAuth 2.0ってなんだっけ(=おさらい)をざっくり説明していきたいと思います。ちなみに・・・今回はSpring Security OAuthとSpring Bootの
SAML認証に関わるプログラミングをずっと続けていたので、ここらで少しわかりやすいまとめと考察を書きたい。 用語説明 SP-initiated SAML IdP-initiated SAML SAMLのXMLの中身 <AuthnRequest> <Response> 誰かの1秒のために3時間デバッグする 便利なツールやドキュメントなど まず、SAMLはだいたい2種類に分けられる。SP-initiated SAMLとIdP-initiated SAMLだ。 用語説明 SPとはService Providerの略でWEBサービスの提供側を指す(例:Cybozu, Dropbox) IdPとはIdentity Providerの略でIDやIDのもつ情報の正当性を保証する側を指す(例:AWS, Google, Salesforce もしくはOpenAM, CA SiteMinderのようなIdPを
以前の書籍を読んだ記事にも書きましたが、その書籍中では Cognito を使いましたが、ユーザープール (User Pools)については紹介だけで、チュートリアルはありませんでした。 blog.mori-soft.com このユーザープールが気になり、簡単なサンプルを作って試してみましたので、メモにまとめておきます。 Cognito ユーザープールとフェデレーティッドアイデンティティの関係について 最初、ドキュメントを呼んでも、すっきりしなかったので、不正確かもしれませんが、自分なりに理解したユーザープールとフェデレーティッドアイデンティティの関係についてを書いておきます。 Cognito のドキュメントを読むと、ユーザープールは、独自で認証を実装するときの Users テーブルのようなものだとわかります(ディレクトリサービスといったほうがいいのかな)。 ユーザーの登録・管理・認証を提供
This document describes how to configure Spring Security for authentication and authorization in a web application. It defines a WebSecurityConfig class that configures HTTP security with roles like OWNER and MANAGER for access control. It also defines a UserDetailsManager service for loading users and a User entity class implementing UserDetails. Tests are shown for security configuration, login,
RFC 6749 (The OAuth 2.0 Authorization Framework) で定義されている 4 つの認可フロー、および、リフレッシュトークンを用いてアクセストークンの再発行を受けるフローの図解及び動画です。動画は YouTube へのリンクとなっています。 English version: Diagrams And Movies Of All The OAuth 2.0 Flows 追記 (2019-07-02) 認可決定エンドポイントからクライアントに認可コードやアクセストークンを渡す方法については、別記事『OAuth 2.0 の認可レスポンスとリダイレクトに関する説明』で解説していますので、ご参照ください。 追記(2020-03-20) この記事の内容を含む、筆者本人による『OAuth & OIDC 入門編』解説動画を公開しました! 1. 認可コードフロー RF
はじめに OAuthを用いて、Web APIのアクセス制御を行います。OAuthの情報は、基本的に以下にあります。この記事は、以下のサイトの情報を読み解いて、最小サンプルを作成してみました。 OAuth2 Developers Guid 作成したいサンプルアプリケーションの要求は以下になります アクセストークンはOAuth2 authorization codeで取得できること Web APIはアクセストークンを用いてアクセス可能なこと Web APIはアクセストークンなしではエラーを返すこと 基本設定 Spring Boot, Spring Security, Spring Security OAuthの3つのライブラリを使用します。 必要なライブラリを使用するためにbuild.gradleに以下を記述します build.gradle dependencies { compile("or
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く