SlideShare une entreprise Scribd logo
1  sur  28
API Token 入門
安德魯
2016/11/18
安德魯是誰?
1. 一宇數位科技 CTO
我們替企業 (HR) 開發設計人才管理系統。提供買斷也提供雲端版本的服務。
2. 現任 MVP, 微軟最有價值專家
3. 沒事會寫寫部落格 (安德魯的部落格)
談論各種軟體開發與設計的大小事,想做個優秀的系統架構師。主題以 .NET /
C# / OOP / Container 為主。
4. 從 2000 年 .NET / C# 還在 Beta 年代就開始在用他了。
喜歡 C# 優雅的語法。
AGENDA
1.原理說明 ( API KEY / SESSION KEY )
2.土砲 API TOKEN
3.DEMO
4.應用
API TOKEN 的難題
USER SERVER
灰色地帶都是不安全的….
API KEY
在不安全的通訊環境,必須安全的傳遞資訊
資訊
資訊
現實世界怎麼解決這種問題?
RSA 的基本概念
(其實我也搞不懂 @@) 只要記得三件事情就好:
1. RSA 的 KEY 有一對,PRIVATE KEY / PUBLIC KEY。
2. 用 PRIVATE KEY 加密的資料,只有對應的 PUBLIC KEY
能解開。
3. PRIVATE KEY 自己保管好,PUBLIC KEY 可以公開。
加密
授權的設定
(object)
Binary Data
Signature
Signed Binary Data
(序列化)
(產生簽章)
(合併明文 + 加密過的 HASH)
原廠的私鑰
(private key)
產生數位簽章
Hash
Hash #1
驗證數位簽章
Signed Binary Data
Binary Data Signature
原廠的公鑰
(public key)
解密
Hash #2
比對
跨網站的認證傳遞
OAUTH 就是類似的作法… 不過我用簡化的 POC 來說明該怎麼做
SCENARIO 說明
USER
AUTH SERVER
灰色地帶都是不安全的….
API KEY
登入,取得 DICE API 的使用授權 (入場券)
Session Token
DICE API SERVER
憑授權(入場券) 使用 DICE API 的各項服務
Session Token
AUTH網站發授權,才能用API的服務
事前準備:
1. 跟原廠申請 API KEY (長期使用,例如 1 年)
2. 每次要使用 API 服務時,就拿 API KEY 去換入場券 (SESSION TOKEN)
3. SESSION 限短期使用,如 1 天,限某 USER,限某來源 IP …
使用 API 服務:
1. 拿 SESSION TOKEN 去使用 API 服務
2. API 端只看這張入場券 (SESSION TOKEN),就要決定讓不讓他使用服務
API KEY
(認證) 由開發者或是使用者,事先跟服務端申請,供將來程式呼
叫 API 時可以使用的依據。
可以把他想像成 “替程式申請的帳號密碼”,有帳號密碼之後你
的程式就可以使用服務端提供的 API。
挑戰: 避免偽造。只有服務端(原廠)發的 API KEY 才能使用。
SESSION KEY
(授權) 程式要開始使用服務時,先跟服務端連線,確認授權無誤
之後,取得 SESSION KEY 做為這次使用的依據。
可以把他想像成: 程式要先 “登入” 服務端之後才能使用。登入時
檢查過權限後就能取得 SESSION KEY,之後到登出前,或是登入
期限過期之前,憑 SESSION KEY 都能任意使用服務,不用再驗證。
挑戰: 避免被濫用,或是 REPLY ATTACK
SESSION KEY
因為時間有限 (藉口),我們今天只討論 SESSION KEY …
SESSION KEY 運作的方式
1. 程式端拿 API KEY 給服務端,通過服務端檢驗後,可以取得
SESSION KEY。
2. 程式端拿 SESSION KEY,再次到服務端呼叫 API。
3. 服務端檢驗 SESSION KEY,[ 驗證 ] 無誤之後就正式接受 API 呼叫。
4. … (REPEAT) …
5. 程式端主動告知服務端,不再使用服務 (登出)。
6. 程式端沒有告知 (登出),服務端經過指定時間之後作廢該 SESSION
KEY。
挑戰
1. 該驗證什麼? (每次都驗證好麻煩)
 若只看 SESSION KEY (不考慮查詢 DB) 如何確認 KEY 是我發出去的?
 如何確認 SESSION KEY 是不是過期了?
 如何確認 SESSION KEY 沒有被竄改?
2. 如何應付 “第三者” 的 REPLY ATTACK ?
 EXPIRED
 IP
 其他任何你能識別來源的資訊
DEMO
不囉嗦,直接看 CODE (我只會 C# / ASP.NET ... )
JWT (Json Web Token)
土砲之後,正式要使用時,還是要選擇熱門的套件…
JWT 能做什麼?
跟前面一樣的事情,但是比你自己土砲強的地方在於:
1. 用的人多!! (已經產生兩億筆資料)
2. 支援的平台多!! (https://jwt.io/)
3. 支援的演算法多
4. 有公信力 (人家相信他不相信你)
5. 工具支援完整 (debugger, browser plugins …)
重點在你如何運用他?
把你想要藉著 TOKEN 傳遞跟驗證的資訊,放
在 PAYLOAD 裡面就行了。
當你不確定你接到的 TOKEN 是不是夠可靠?
用 JWT 解碼 + 驗證就好了。
JWT 怎麼用?
官網講得比我好… ORZ
HTTPS://JWT.IO/INTRODUCTION/
其他應用
TOKEN 還能用在哪裡?
如果你靠寫套裝程式賣錢 (授權)…
Service @ Cloud
當作授權序號
驗證過是原廠給的再啟用系統
產生授權碼
簽約 / 付款
如果你靠線上服務賺錢…
Service #A @ Cloud
Service #B @ Intranet Service #C @ Intranet
Partner Services
(負責安裝與維護)
Site Token
--------------------------------
- Site ID: SERVER1
- Site URL: http://server1
Site Token
--------------------------------
- Site ID: SERVER2
- Site URL: http://server2
Site Token
--------------------------------
- Site ID: SERVER3
- Site URL: http://server3
Service Token
---------------------------------------------------------
- 允許 SERVER 2 使用 SERVER 1 的服務
- 啟用功能 A、B
- 合約期限 ~ 2018/12/31
Service Token
---------------------------------------------------------
- 允許 SERVER 3 使用 SERVER 1 的服務
- 啟用功能 B、C
- 合約期限 ~ 2020/12/31
原廠
(只負責產生 Token)
Question?
謝謝大家 
請支持 安德魯的部落格 ~
HTTPS://WWW.FACEBOOK.COM/ANDREW.BLOG.0928
HTTP://COLUMNS.CHICKEN-HOUSE.NET/

Contenu connexe

Tendances

Tendances (20)

91APP 之API 經濟學與API Gateway與導入之旅
91APP 之API 經濟學與API Gateway與導入之旅91APP 之API 經濟學與API Gateway與導入之旅
91APP 之API 經濟學與API Gateway與導入之旅
 
我的 DevOps 故事
我的 DevOps 故事我的 DevOps 故事
我的 DevOps 故事
 
アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版アジャイル開発の基礎知識 抜粋版
アジャイル開発の基礎知識 抜粋版
 
微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu微服務的基礎建設 - Service Discovery, Andrew Wu
微服務的基礎建設 - Service Discovery, Andrew Wu
 
微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?微服務架構|01|入門微服務|到底什麼是微服務?
微服務架構|01|入門微服務|到底什麼是微服務?
 
導讀持續交付 2.0 - 談當代軟體交付之虛實融合
導讀持續交付 2.0 - 談當代軟體交付之虛實融合導讀持續交付 2.0 - 談當代軟體交付之虛實融合
導讀持續交付 2.0 - 談當代軟體交付之虛實融合
 
微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue微服務基礎建設 - Message Queue
微服務基礎建設 - Message Queue
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
ドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinxドキュメントを作りたくなってしまう魔法のツールSphinx
ドキュメントを作りたくなってしまう魔法のツールSphinx
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
微服務資料管理的天堂路 - CQRS / Event Sourcing 的應用與實踐
 
アジャイル開発の始め方
アジャイル開発の始め方アジャイル開発の始め方
アジャイル開発の始め方
 
Windowsコンテナ入門
Windowsコンテナ入門Windowsコンテナ入門
Windowsコンテナ入門
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)NGINX Back to Basics: Ingress Controller (Japanese Webinar)
NGINX Back to Basics: Ingress Controller (Japanese Webinar)
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 

En vedette

En vedette (17)

2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Docker 進階實務班
Docker 進階實務班Docker 進階實務班
Docker 進階實務班
 
容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中容器驅動開發 - .NET Conf 2017 @ 台中
容器驅動開發 - .NET Conf 2017 @ 台中
 
容器與IoT端點應用
容器與IoT端點應用容器與IoT端點應用
容器與IoT端點應用
 
容器與資料科學應用
容器與資料科學應用容器與資料科學應用
容器與資料科學應用
 
HITCON駭客戰隊與CTF經驗分享
HITCON駭客戰隊與CTF經驗分享HITCON駭客戰隊與CTF經驗分享
HITCON駭客戰隊與CTF經驗分享
 
聊天機器人:一個沒有小編的世界
聊天機器人:一個沒有小編的世界聊天機器人:一個沒有小編的世界
聊天機器人:一個沒有小編的世界
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
用 Bitbar Tool 寫 Script 自動擷取外幣
用 Bitbar Tool 寫 Script 自動擷取外幣用 Bitbar Tool 寫 Script 自動擷取外幣
用 Bitbar Tool 寫 Script 自動擷取外幣
 
時代在變 Docker 要會:台北 Docker 一日入門篇
時代在變 Docker 要會:台北 Docker 一日入門篇時代在變 Docker 要會:台北 Docker 一日入門篇
時代在變 Docker 要會:台北 Docker 一日入門篇
 
與設計架構當朋友
與設計架構當朋友 與設計架構當朋友
與設計架構當朋友
 
Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路Continuous Delivery - 敏捷開發的最後一哩路
Continuous Delivery - 敏捷開發的最後一哩路
 
PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)PHP 良好實踐 (Best Practice)
PHP 良好實踐 (Best Practice)
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享
 
Windows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, KubernetesWindows Container 101: dotNET, Container, Kubernetes
Windows Container 101: dotNET, Container, Kubernetes
 
[系列活動] 一天搞懂對話機器人
[系列活動] 一天搞懂對話機器人[系列活動] 一天搞懂對話機器人
[系列活動] 一天搞懂對話機器人
 

Similaire à API Token 入門

在Sae上开发高性能微博应用
在Sae上开发高性能微博应用在Sae上开发高性能微博应用
在Sae上开发高性能微博应用
easychen
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状
Tom Fan
 

Similaire à API Token 入門 (20)

探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台iThome Modern Web 2018: 如何打造高效的機器學習平台
iThome Modern Web 2018: 如何打造高效的機器學習平台
 
20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務
20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務
20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務
 
Introduction to ngn sce
Introduction to ngn sceIntroduction to ngn sce
Introduction to ngn sce
 
HITCON GIRLS: Android 滲透測試介紹 (Elven Liu)
HITCON GIRLS: Android 滲透測試介紹 (Elven Liu)HITCON GIRLS: Android 滲透測試介紹 (Elven Liu)
HITCON GIRLS: Android 滲透測試介紹 (Elven Liu)
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure Functions
 
在Sae上开发高性能微博应用
在Sae上开发高性能微博应用在Sae上开发高性能微博应用
在Sae上开发高性能微博应用
 
在Sae上开发高性能微博应用key2
在Sae上开发高性能微博应用key2在Sae上开发高性能微博应用key2
在Sae上开发高性能微博应用key2
 
Er introduction
Er introductionEr introduction
Er introduction
 
DevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous SecurityDevSecOps-The Key of Continuous Security
DevSecOps-The Key of Continuous Security
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状
 
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
 
[YOUKU-API]Training_For_BJ_Sales_Team
[YOUKU-API]Training_For_BJ_Sales_Team[YOUKU-API]Training_For_BJ_Sales_Team
[YOUKU-API]Training_For_BJ_Sales_Team
 
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
Global Azure Bootcamp @ 廣州 - 智能聊天機器人四代目
 
災難演練@AWS 實戰分享
災難演練@AWS 實戰分享 災難演練@AWS 實戰分享
災難演練@AWS 實戰分享
 
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
災難演練 @ AWS 實戰分享 (Using AWS for Disaster Recovery)
 
聊天機器人概論 Introduce to chat bot sevices
聊天機器人概論 Introduce to chat bot sevices聊天機器人概論 Introduce to chat bot sevices
聊天機器人概論 Introduce to chat bot sevices
 
国际图象互操作框架(IIIF) APIs和应用实例
国际图象互操作框架(IIIF)  APIs和应用实例 国际图象互操作框架(IIIF)  APIs和应用实例
国际图象互操作框架(IIIF) APIs和应用实例
 
程式交易介紹及 FinTech 創作分享
程式交易介紹及 FinTech 創作分享程式交易介紹及 FinTech 創作分享
程式交易介紹及 FinTech 創作分享
 

API Token 入門

Notes de l'éditeur

  1. https://jwt.io/introduction/