SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
OAuth 2.0 MAC Authentication
Report
Ryo Ito
Follow
home
Jan. 30, 2011
•
0 likes
•
1,906 views
1
of
27
OAuth 2.0 MAC Authentication
Jan. 30, 2011
•
0 likes
•
1,906 views
Report
Technology
Education
Ryo Ito
Follow
home
Recommended
[CB16] (P)FACE :アップルのコアへ、そしてルート権限へのエクスプロイト by Moony Li & Jack Tang
CODE BLUE
900 views
•
43 slides
SSH力をつけよう
(^-^) togakushi
49.4K views
•
62 slides
The Latest Specs of OpenID Connect at #idcon 9
Ryo Ito
1.7K views
•
46 slides
MongoDB勉強会資料
Hiromune Shishido
2.8K views
•
29 slides
Community cloud運用開発の基礎
Salesforce Developers Japan
6.7K views
•
52 slides
YAPC::Tokyo 2013 ritou OpenID Connect
Ryo Ito
16.8K views
•
37 slides
More Related Content
Similar to OAuth 2.0 MAC Authentication
OSS開発勉強会
Kohei KaiGai
816 views
•
12 slides
ログ管理のベストプラクティス
Akihiro Kuwano
23.2K views
•
81 slides
後期02
Takenori Nakagawa
523 views
•
45 slides
Status 425 HTTP/Tokyo
yuki-f
1.6K views
•
37 slides
OpenStack API
Akira Yoshiyama
6.5K views
•
23 slides
Twitter連携chrome extension作り方
Hiroshi Oyamada
2.9K views
•
19 slides
Similar to OAuth 2.0 MAC Authentication
(20)
OSS開発勉強会
Kohei KaiGai
•
816 views
ログ管理のベストプラクティス
Akihiro Kuwano
•
23.2K views
後期02
Takenori Nakagawa
•
523 views
Status 425 HTTP/Tokyo
yuki-f
•
1.6K views
OpenStack API
Akira Yoshiyama
•
6.5K views
Twitter連携chrome extension作り方
Hiroshi Oyamada
•
2.9K views
Couchbase MeetUP Tokyo - #11 Omoidenote
kitsugi
•
695 views
OAuth Echo の Rails Gem
Toru Kawamura
•
2.7K views
Web packaging IETF 側
yuki-f
•
1K views
OAuth 2.0 と ライブラリ
Kenji Otsuka
•
217 views
クラウドインターネットルータ
Yasuhito Takamiya
•
1.9K views
Beginning Java EE 6 勉強会(7) #bje_study
ikeyat
•
5.1K views
webサイトの認証周りのセキュリティを高めよう
in0o0o0
•
836 views
20120423 hbase勉強会
Toshiaki Toyama
•
2.8K views
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Toru Yamaguchi
•
3.8K views
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Panda Yamaki
•
33.2K views
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
•
17.8K views
Web基礎
stx_kata
•
952 views
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
y_taka_23
•
4.6K views
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらインターネット株式会社
•
12.3K views
More from Ryo Ito
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
Ryo Ito
2.5K views
•
34 slides
idcon mini vol3 CovertRedirect
Ryo Ito
1.7K views
•
17 slides
OpenID-TechNight-11-LT-mixi
Ryo Ito
2.7K views
•
6 slides
Idcon 17th ritou OAuth 2.0 CSRF Protection
Ryo Ito
4.6K views
•
31 slides
なんとなくOAuth怖いって思ってるやつちょっと来い
Ryo Ito
14.2K views
•
41 slides
#idcon 15th ritou 2factor auth
Ryo Ito
2.6K views
•
33 slides
More from Ryo Ito
(20)
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
Ryo Ito
•
2.5K views
idcon mini vol3 CovertRedirect
Ryo Ito
•
1.7K views
OpenID-TechNight-11-LT-mixi
Ryo Ito
•
2.7K views
Idcon 17th ritou OAuth 2.0 CSRF Protection
Ryo Ito
•
4.6K views
なんとなくOAuth怖いって思ってるやつちょっと来い
Ryo Ito
•
14.2K views
#idcon 15th ritou 2factor auth
Ryo Ito
•
2.6K views
Open id connect claims idcon mini vol1
Ryo Ito
•
2.4K views
OID to OIDC idcon mini vol1
Ryo Ito
•
5.6K views
Account Chooser idcon mini Vol.1
Ryo Ito
•
2.2K views
BackplaneProtocol超入門
Ryo Ito
•
2.1K views
UserManagedAccess_idcon13
Ryo Ito
•
1.8K views
WebIntents × SNS
Ryo Ito
•
1.2K views
Idcon11 implicit demo
Ryo Ito
•
4.1K views
OpenID_Connect_Spec_Demo
Ryo Ito
•
1.4K views
OAuth 2.0 Dance School #swj
Ryo Ito
•
873 views
Ritou idcon7
Ryo Ito
•
686 views
Summary of OAuth 2.0 draft 8 memo
Ryo Ito
•
677 views
Introduction of OAuth 2.0 vol.1
Ryo Ito
•
1.3K views
0905xx Hybrid Memo
Ryo Ito
•
993 views
Anonymous OAuth Test
Ryo Ito
•
1.2K views
Recently uploaded
指側面を入力インタフェース化するリング型デバイス
sugiuralab
5 views
•
1 slide
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
245 views
•
31 slides
CatBoost on GPU のひみつ
Takuji Tahara
982 views
•
30 slides
GraphQLはどんな時に使うか
Yutaka Tachibana
137 views
•
37 slides
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
83 views
•
1 slide
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
72 views
•
18 slides
Recently uploaded
(13)
指側面を入力インタフェース化するリング型デバイス
sugiuralab
•
5 views
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
•
245 views
CatBoost on GPU のひみつ
Takuji Tahara
•
982 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
137 views
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
•
83 views
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
•
72 views
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
NTT DATA Technology & Innovation
•
321 views
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
•
90 views
遠征ドルヲタのための便利サイトを作ってみた
Kenta Fujimoto
•
91 views
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
•
226 views
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
NTT DATA Technology & Innovation
•
32 views
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
•
113 views
画像生成AIの問題点
iPride Co., Ltd.
•
127 views
OAuth 2.0 MAC Authentication
1.
OAuth 2.0 draft
12で出てきた MAC Authenticationとは @ritou http://twitter.com/ritou http://d.hatena.ne.jp/ritou/
2.
OAuth 2.0 draft
12の説明 • http://tools.ietf.org/html/draft-ietf-oauth-v2-12 • Clientは、Access Tokenを用いて protected resourcesにアクセスする • Access Tokenの使用方法はAuthZ Server から発行されたAccess TokenのTypeに依 存する – Token Type “mac” はなんとかかんとか ↑これ気になるので調べる 2
3.
HTTP Authentication:
MAC Authentication • 2011/1/30時点 – http://tools.ietf.org/html/draft-hammer-oauth- v2-mac-token-02 3
4.
一言で言うと • Access Token,Secret,MACアルゴリズム
を使った署名付きHTTPリクエストの作り方! 4
5.
Example • とりあえずどんな感じで使われるのか、流れ
を見てみる 5
6.
Example(1) • こんな感じで何も考えずリソースアクセス GET
/resource/1?b=1&a=2 HTTP/1.1 Host: example.com • 結果は、エラー! HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC realm="example" Date: Thu, 02 Dec 2010 21:39:45 GMT 6
7.
Example(2) • 実は事前にToken Credentialのセットを持
っていた Access Token: h480djs93hd8 Token Secret: 489dks293j39 MAC Algorithm: hmac-sha-1 • HTTPリクエストを作るために、以下の2つの 値を計算する Timestamp: 137131200 Nonce: dj83hs9s 7
8.
Example(3) • 署名を作るために正規化 h480djs93hd8
137131200 dj83hs9s GET example.com 80 /resource/1 a=2 b=1 8
9.
Example(4) • Token SecretとMAC
algorithmで指定さ れた方法で署名を作成 YTVjyNSujYs1WsDurFnvFi4JK6o= 9
10.
Example(5) • HTTP Authorization
Headerにいろいろと 詰め込んでHTTP Requestを作成 GET /resource/1 HTTP/1.1 Host: example.com Authorization: MAC token="h480djs93hd8", timestamp="137131200", nonce="dj83hs9s", signature="YTVjyNSujYs1WsDurFnvFi4JK6o=" 10
11.
Example終わり • OAuth 1.0系でおなじみの署名作成+AuthZ
Header作成処理に似ている – 1.0系では、全てのリソースアクセスにClient CredentialとToken Credentialの両方が必要 なのでScaleしないとか言われていた – この仕様ではToken Credentialのみで署名を 作成するイメージ 11
12.
ざっくり内容まとめ • Issuing MAC
Credentials • The "Authorization" Request Header • Body Hash • Signature • Verifying Requests • Use with OAuth 2.0 • Security Considerations • IANA Considerations 12
13.
Issuing MAC Credentials •
必要な値はこちら – access token • この説明は省略! – secret • 共有秘密鍵って感じの値 – algorithm • 署名計算に利用するMAC algorithm • “hmac-sha-1”, “hmac-sha-256“もしくは登録され たもの(まだこのへん未定義) 13
14.
The "Authorization" Request
Header • AuthZ Headerのフォーマット credentials = 'MAC' [ RWS 1#param ] param = access-token / timestamp / nonce / body-hash / signature access-token = 'token' '=' <"> plain-string <"> timestamp = 'timestamp' '=' <"> 1*DIGIT <"> nonce = 'nonce' '=' <"> plain-string <"> body-hash = 'bodyhash' '=' <"> plain-string <"> signature = 'signature' '=' <"> plain-string <"> plain-string = 1*( DIGIT / ALPHA / %x20-21 / %x23-5B / %x5D-7E ) 14
15.
Header attributes •
token : 【必須】 Access Token • timestamp : 【必須】 • nonce : 【必須】ユニークでランダムな文字列 • bodyhash : 【任意】 このあと説明 • signature : 【必須】 署名 15
16.
Body Hash • Requestのentity-bodyのHash値を計算し
たもの bodyhash = BASE64 ( HASH (text) ) – Hash : 指定されたHashアルゴリズム – text : HTTP request entity-body – BASE64 : base64-encoding関数 – bodyhash : AuthZ Headerに指定する値 • OAuth 1.0系でもOAuth Request Body Hashという拡張仕様がある 16
17.
Signature • Normalized Request
String – いわゆるSignature base stringの作成 • hmac-sha-1/hmac-sha-256 – Hash値を計算 17
18.
Normalized Request String •
以下の値を連結 – Access Token – timestamp – nonce – request entity-body hash(任意) – HTTP request method – hostname – port – URI Path – URI query (この詳細は3.3.1.1を見れ!) 18
19.
Parameters Normalization • クエリパラメータの処理
– percent-encodingでエスケープ – Key,valueを=でつなぐ – ascending byte value orderingでソート – 改行コード(ASCII code 10)を使って結合 19
20.
hmac-sha-1/hmac-sha-256 • algorithmにしたがってSignatureを作成 –
hmac-sha-1 digest = HMAC-SHA1 (key, text) – hmac-sha-256 digest = HMAC-SHA256 (key, text) 20
21.
Verifying Requests • Resource
Server側の検証処理 1. bodyhash, signatureの再計算を行い、 Requestの値と比較 2. timestamp,nonce,access tokenの検証 3. access tokenのscopeとstatusの確認 • 検証に失敗した場合は、HTTP 401(unauthorized)を返すべき 21
22.
The "WWW-Authenticate"
Response Header Field • レスポンスのフォーマット challenge = "MAC" [ RWS 1#param ] param = realm / error / auth-param error = "error" "=" quoted-string – サンプル HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC realm="example“ HTTP/1.1 401 Unauthorized WWW-Authenticate: MAC realm="example" error="The access token expired" 22
23.
Use with OAuth
2.0 • この仕様は、OAuth 2.0のMAC Token Typeを定める • ただし、以下についてはこの仕様で定めない – MAC TypeのTokenの要求方法 – どのHMACアルゴリズムをサポートしているか等 のDiscovery機能 23
24.
Issuing MAC-Type Access
Tokens • とりあえず、Access Tokenと一緒に以下の 値が必要 – secret : 共有秘密鍵 – algorithm : hmac-sha-1, hmac-sha-256もし くは今後登録されるアルゴリズム 24
25.
IANA Considerations • 下記のAccess
Token TypeをRegistryに登 録する – “mac” • 下記のパラメータをRegistryに登録する – “secret” – “algorithm” 登録ってめんどいね。。。 25
26.
そういえば • OAuth 2.0では、当初からSecretを必要とし
ないbearer tokenの形式を利用することが 提案されたが、”やっぱり署名も必要なんじゃ ねーの?”という意見もあった – これを使うと、HTTP Requestが”正しいToken Credentialの持ち主”によって作られたことを確 認できる と思われる 26
27.
終わり • 続きはまたブログで! http://d.hatena.ne.jp/ritou/
27