4種認證(authentication)或授權(authorization)方式
authentication 認證訪問者是誰
authorization 訪問權限
authentication 一般包含兩個步驟,第一步,用戶需要安裝服務提供的授權證書,或者用戶需要使用API服務中已經存儲的某個賬戶,也可以創建一個;第二步,每次發送請求到API服務時需要帶上證書,因為RESTful API 是不會記錄客戶端與服務端的會話,無狀態限制。
有些認證技術還涉注冊,客戶端需要安裝證書,并且按需要安裝用戶個人的證書,客戶端需要將客戶端的證書和用戶證書一起攜帶發送請求。
Basic Authentication
HTTP Basic authentication is described in RFC 2617. It’s a simple username/password scheme. 將用戶名與密碼進行Base64轉碼,但這種轉碼是可逆的。某些爬蟲工具可能會獲取這些請求信息,直接獲取用戶的賬號和密碼,如果采用HTTPS方式發送請求,每次請求和響應會被SSL加密,爬蟲無法獲取這些信息。另一個問題,由于API通常不能信任用戶使用的客戶端,如果用戶在多個設備(平板、電腦、手機)中登錄了這個API服務,其中一個設備出現安全問題,需要修改密碼,那么其他設備也需要重新登錄才行。為了解決第二個問題,需要對每個設備給予不同的證書。
OAuth
OAuth 是一種授權框架,能夠讓應用通過HTTP 服務獲取有限的訪問,訪問用戶賬號信息,例如Facebook, GitHub, DigitalOcean都采用該技術。它可以委托認證服務授權第三方應用訪問自己的賬號信息。OAuth2 相比OAuth 1,可以在PC端、移動端設備上使用。
OAuth 定義了四種角色:
1. 資源所屬者,User, 擁有該資源的人,擁有Application所訪問資源的權限。
2. 客戶端, Application, 需要訪問用戶賬號信息的應用
3. 資源服務器, API
4. 授權服務器, API
OAuth 抽象版流程圖
在應用(Application/Client)使用OAuth前需要在Service API 注冊該應用。需要在Service中提交應用的信息:名稱、網站、授權后的跳轉URL。
當應用注冊后,Service會發布“client credentials”客戶端證書,包括client identifier 和 client secret. Client ID 是公開的字符串,提供ServiceAPI標識該應用,并且用來構建呈現給用戶的授權URLs。 Client Secret用來認證Application向ServiceAPI的發起訪問用戶賬號信息的請求,需要確保Application與API之間的隱私。
Authorization Grant (權限授予方式) 在上圖的第一步中有權限授予操作。OAuth2 提供四種授予權限的方式,根據不用場景使用:
1. Authorization Code: 在服務端應用采用
2. Implicit: 移動端APP,Web應用
3. Resource Owner Password Credentials: 在可信任的應用中使用
4. Client Credential:應用訪問API采用的
Authorization Code Flow
第一步,用戶 訪問授權請求的鏈接,例如
鏈接包含五個信息:
API 授權點
client_id: client_id,
redirect_uri=CALLBACK_URL
response_type=code, 指定應用的授權的方式,采用authorization code grant 方式
scope=read. 指定訪問的等級
第二步,授權應用后,會獲取authorization code
第三步,根據code換取 token
來源:本站整理 發布時間:2019/1/31 16:30:13
瀏覽次數
教程評論
相關教程