Carpe Diem

備忘録

認証

SCRAM (Salted Challenge Response Authentication Mechanism) 認証

概要 MongoDBやPostgreSQLでは認証時にSCRAM (Salted Challenge Response Authentication Mechanism) と呼ばれる認証方式を採用しています。 これは従来のチャレンジレスポンス型の認証を改善したものであり、パスワード(ハッシュ値含む)といった機密情報…

JWTの署名検証で使う公開鍵をX.509証明書で管理する

概要 JWTをアクセストークンとして利用する場合、署名(秘密鍵)は認証サーバで、署名検証(公開鍵)はリソースサーバで行うのが良いです。 そのため認証サーバは公開鍵をリソースサーバに公開する必要があります。 Googleなどの大規模サービスを見ると、生…

セキュアなトークン管理方法

概要 クライアント↔サーバ間の認証・認可情報としてのトークン管理はWebサービスとしては必ずつきまとうものですが、一方できちんと実装しないとセキュアに管理はできません。 今回はそのトークン管理方法の一例を紹介します。 要件 今回の主な要件は以下で…

Macのsudoでパスワード入力でなくTouch IDを使う

概要 MacにはTouch IDがあり、インストールなど様々なところでこれまでパスワード入力が必要だった箇所がTouch IDによる指紋認証が使えるようになっています。 その中でターミナルでのsudoのパスワード入力もTouch IDに替えることができるので対応します。 …

PAM (Pluggable Authentication Modules)

概要 LinuxにはPAMという認証システムとアプリケーションを分離するための仕組みが用意されています。 ref: https://docs.oracle.com/cd/E19253-01/819-0396/ch3pam-01/index.html プラガブルという名前の通り、モジュールによって認証方法を簡単に切り替え…

HashiCorp VaultのDynamic Secrets

概要 HashiCorp VaultにはDynamic Secretsという期限の付いた認証情報を動的に生成してパブリッククラウドやDBへのアクセスをセキュアに保つ仕組みが用意されています。 課題・背景 秘密情報とその周辺の認証を一元化し、適切な暗号化・Auditなどをしっかり…

HashiCorp VaultのAppRoleを使ってトークン取得

概要 HashiCorp Vaultではトークンを取得するための様々な認証方法がありますが、その中でアプリケーションに向いたAppRoleという認証方法があります。 ref: AppRole Pull Authentication | Vault - HashiCorp Learn この図ではRole IDとSecret IDというID &…

HashiCorp VaultでSSHをCA認証に

背景 AWSを運用しているとEC2のsshのキーペア管理が難しいです。 GCPであればメタデータにsshキーを登録すれば自動で各VMにsshできる仕組みがありますが、AWSは各インスタンスにsshのキーペアを1つだけ登録するようになっているため、複数人で運用するには…

GoでJWTの具体的な実装

概要 以前JWTを認証用トークンに使う時に調べたこと - Carpe Diemで紹介した内容の具体的な実装の紹介です。 環境 golang 1.8.1 署名アルゴリズムと鍵長は以下とします。 署名アルゴリズム 鍵長 RSA-SHA256 4096bit 成果物 今回の完成形はこちら github.com

ELB+nginxでbasic認証をかける方法

概要 開発環境では外部に見られないようにbasic認証をかけることが良くあります。 一方でELBのHealthCheckはbasic認証がかかったパスだと401エラーが返り、そのままだとOutOfServiceとなって接続することができません。 今回はそんな時の対応方法です。Nginx…

GoでTwitterのOAuth1.0を用いた認証

概要 GoでTwitterのOAuthを用いた認証をします。 oauth1.0のライブラリはいくつかありますが、今回はgaryburd/go-oauthを利用します。 github.com 環境 golang v1.6.2

JWTを認証用トークンに使う時に調べたこと

概要 JWTを認証用トークンに使う時に調べたことをまとめます。 JWTとは JWTはJWSやJWEの構造の中にエンコードして埋め込まれるJSON形式のclaimのセットです。 一般的にはJWS形式のJWTが使われるのでそれを前提に進めます。 JWS形式のJWTは以下のフォーマット…

Node.jsでFacebookのOAuth2.0を用いた認証

概要 FacebookのOAuth2.0を利用した認証を使うことがあったのでまとめました。 Node.jsなのでpassportというライブラリを使用します。 環境 Node.js 5.0.0 Express 4.13.1 npm 3.4.0 事前準備 以下のFacebookページでOAuth用のアプリを用意してください。 Fa…

JWTを使ってGoogleAPIのアクセストークン取得する

概要 GoogleAPIを使う際、多くの場合は「ユーザごとに認証させてアクセストークンを発行し、リクエストに利用する」という流れですが、APIによってはわざわざユーザ個別にアクセストークンを発行させる必要がないケースもあります。 そんなケースでは「Servi…

OpenID Connect の署名検証

概要 OpenID Connectで必須なJWTの検証方法です。 以前書いた「Node.jsでOpenID Connect認証」を前提としています。 検証方法は主に2つあります。 Googleの検証用エンドポイントを使う 公開鍵を使い自分で検証する 公開鍵の方はさらに2つやり方があるので…

OpenIDやOAuthやらの比較

概要 色んな種類がありますが、各手法の流れ、メリット・デメリットを整理するためにまとめました。 今回比較するのは以下の4つです。 OpenID OAuth2.0を用いた認証(Authorization Flow) OAuth2.0を用いた認証(Implicit Flow) OpenIDConnect シーケンス…

Node.jsでOpenID Connect認証

概要 前回はOpenIDで認証を行いました。 ですが実はGoogleのOpenIDでの認証は2015/04までに廃止の予定らしいのでOpenIDConnectへの移行を勧めてるらしいです。 なので今回はOpenIDConnectでの認証を実装します。 環境 Node.js 0.10.22 Express 4.0 passport …

Node.jsでOpenID認証

概要 OpenIDを用いてログイン認証(の一部)を実装します。 一部と言うのはDB含めたユーザデータの保持までは範囲外としてるためです。 またOAuthとの区別が付いていない人は、以下のリンクを参考にしてください。 非技術者のためのOAuth認証(?)とOpenIDの違…