日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OAuth简介(包含简明使用教程)

發布時間:2024/9/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OAuth简介(包含简明使用教程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SSO:用戶一次登陸后在多個系統免登錄。

博客gem 'doorkeeper'? https://i.cnblogs.com/EditPosts.aspx?postid=9255973

?

OAuth:用戶授權第三方應用訪問自己的資源無需提供賬號密碼。

1. 維基百科:

OAuth(開放授權)是一個開放標準,允許用戶讓第三方應用(網站/app)訪問該用戶在另一網站(qq, 微博,微信等等)上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。?

OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth讓用戶可以授權第三方網站訪問他們存儲在另外服務提供者的某些特定信息,而非所有內容。

?

2 流程圖(用git賬號登陸第三方網站)

?

3. devise使用OmniAuth


?


?

簡單易學的PPT:(作者大?)

?

?https://ruby-china.org/topics/15825

(筆記和摘錄)

?目標

  • OAuth2 協議怎么運行的
  • 看懂基于OAuth2的第三方API
  • 知道怎么用Oauth2 鎖你的API(不理解)?

?課表

  • Oauth2是什么
  • 通信協定怎么跑
  • 制造Oauth2 Provider的方法(沒看, 幻燈片224頁)
  • 第一次用rails+ grape api整合oauth2 就上手(略, 244頁)

?


?

OAuth2.0:? the OAuth2.0 authorization framework

?

Oauth2是什么:

?

Resource

Resource Owner = User的情況?

  • 就是你的網站上的User
  • API拉到的是根User有關的資料
  • 比如好友名單,信件內容
  • 授權必須由本人親自確認

Resource Owner = Client

  • 爬公開的資料,沒有個體人的存在
  • Twitter稱為App-Only Authorization
  • Facebook稱為App Access Token

?

Client

  • User授權給第三方程序,這個程序就是Client (我的理解:web網站服務器)
  • 例子:手機上的APP, Facebook上的游戲, 桌面app。

Client必須事先注冊

  • “Client Registration”
  • Client ID
  • Client secret (密碼)
  • Redirect URl (重要?)

在Facebook上注冊獲得facebook_app_id, facebook_app_secret, 在facebook上設置redirect URIs

Redirect URI

  • User本人確認使用Facebook登陸后,返回結果到Client。
  • 要事先指定URl, 若不一致,則不可Redirect過去
  • 可以指定多組,上面的圖指定了2組。
  • 推薦使用HTTPS.

?

Public 對比 Confidential Client

  • 根據【能否保護資料】來區分:
  • Confidential-Server-Side application 機密的服務器端程序
  • Public-手機app/桌面程序/Javascript App/ Browser Extension

Client Authorization(使用于Confidential Client)

    • 出示Client ID + Secret 向 Auth.Server認證自己(我是一個服務器商業機構,我想獲得user的信息)
    • Client要登入到Auth.Server(Facebook的開發者相關的服務器)

Client

    • 有ID/Secret用于登陸
    • 用Redirect URI確認 瀏覽啊轉地址到 正確的Client.
    • Public/Confidential 這2種模式有各自的授權流程(token獲得流程)

?

Endpoints(可見下面的圖)

3個端點:

?

  • Authorization Endpoint(授權端): 用來給User本人確認授權
  • Token Endpoint: 用來讓Client(如:商業網站)得到Token
  • Redirection Endpoint:? Client用來收取資料的URls

?

Authorization Endpoint

  • 給用戶User本人一個用于授權的網頁,可以填寫賬號名,密碼。
  • Client拿到Grant授權狀,不是token。
  • Resource Owner/User答復之后, 驗證服務器(facebook)會把批準碼grant傳回到Redirect URI

Redirection Endpoint

  • 用來從browser接收Auth.Server來的資料。
  • 把資料存在Client上(猜測:這里是商業網站服務器上)
  • Client在facebook上注冊時,填寫Redirection URL就是callback URL

Token Endpoint

  • 給Client取得真正的Token
  • JSON API 機械化界面,無網頁。

?

Resource Server

  • Client必須出示Token才能拿資料
  • 可以使用Scope限制Token的取用范圍。
  • Password-Free API
  • Login via Your Website?

?


?

?

Parameters 和 Data

Client ID/Secret

  • 用于Client認證(Client 登入到Auth.Server)
  • HTTP Basic Auth或包在Form里面。(禁用URL)

Id和secret被base64()生成亂碼,放入請求頭中:

Basic Auth Header

Authorization: Basic xxx亂碼

?

Token(s)

  • Access Token: 打Api用的
  • Refresh Token: Access Token過期可以換新的

Access Token:

    • 向Resource Server要資料(user信息)
    • 可以綁定一組Scope
    • 可以設定氣息,可以撤銷Revoke
    • 授權流程的目標就是拿到Access Token

Refresh Token

    • 換發Access Token用,只會傳到Auth.Server
    • 和一個Access Token綁定,隨Access Token一切核發
    • 用過就失效,新的Access Token會綁定新的Refresh Token

?

Scopes

  • 用來表示哪行資料可以存取的權限范圍。
  • 如: 好友名單, 相片, friends_list, photos
  • 申請授權時可以規定它。

?

State

  • 用來放在CSRF攻擊(cross site request forgery)
  • Rails使用了校驗token防止了這種攻擊。

?

?

怎么運行的:如果取得授權(從client視角,程序程序開發者視角)

  • Client 向Res.Owner取得Grant
  • Client 用Grant向Authorization Server換Token
  • Token拿到,去打API
  • 常見的scenario:

    有網站Facebook, 你希望在那上面的User(Resource Owner),

    透過Facebook的Authorization Server,

    給你的網站(Client)權限(Token),可以讀取那User的資料(Resource Server)

    例子:使用你網站的user無需注冊,而是使用Fackbook/qq的賬號注冊。?

    ?

    Authorization Code Grant Flow:

    • Grant是具體string, 稱為Code
    • 需要經過Browser
    • 適用Client:商業網站 。

    ?

    ?

    具體過程見幻燈片(40多張)

    https://speakerdeck.com/chitsaou/jian-dan-yi-dong-de-oauth-2-dot-0?slide=73

    ?

    步驟A之前,已經在Facebook上注冊了。

    當網站上的用戶點擊login with Facebook按鈕的時候:

    (A)發出Get request

    猜測:還應該包括用戶輸入facebook的賬號和密碼。這樣facebook才能找到對應用戶的Res.Owner

    (B)的過程,在瀏覽器上彈出對話框問,是否授權,用戶選擇同意。進入(C)

    ? (C)? 的過程,Authorization Server傳回Client數據:Grant Code。

    如果(B)不授權,(c)Client收到錯誤的信息。

    Redirection endPoint會檢查state和存的數據是否一致。沒問題就去換Token了。

    (D)步驟:

    • 這是服務器后臺的事情。

    • 發出 POST request到Auth.Server的Token Endpoint換Token

    ?

    (E)步驟:

    Authorization Server:

  • 確認Client Auth(Id/Secret)正確。
  • 找到Grant Code, 并確認Redirect URI 相同
  • 發Token
  • Client的Token Request的Response 是 JSON Response

    可以一并發Refresh Token

    ?

    ?

    手機app/桌面app因為,客戶端驗證不可信,所以另有一套implicit grant flow。

    具體見108頁的幻燈片。

    ?

    自產自用的,Resource Owner Password Credentials Grant Flow

    具體見148頁的幻燈片。

    注意:需要Resource Owner高度信賴Client。可以做系統內建的應用或官方應用程序。

    ?

    不需要User, 只存取公開資料, Client Credentials Grant Flow??160頁

    ?

    發生錯誤時的回應方式171頁

    ?


    ?

    拿到Token了,如何打API?

    (RFC6750 'Bearer token usage') .?https://tools.ietf.org/html/rfc6750

    • 出示Token給Resource Server。
    • Token內容亂碼就行。
    • 推薦放在header中。

    ?

    發生錯誤時的回應方式211

    ?

    Token過期,換掉。 Token Refresh(217頁)


    ??

    制造OAuth2 Provider的方法 =造Authorization Server (沒看)

    ?

    第一次用rails+ grape api整合oauth2 就上手(244頁, 有詳細步驟)

    • 用Devise生成User(Resource Owner)
    • 用Doorkeeper蓋 Authorization Server
    • 用Grape蓋API (Resource Server)
    • 自己刻 Resource Server Guard 來鎖api

    第2步驟:

    rails g doorkeeper:install

    rails g doorkeeper:migration

    rails db:migrate

    生成3個new tables

    • oauth_application: 用于Clients 注冊
    • oauth_access_grant: 用于儲存Auth Grant Codes
    • oauth_access_token: 真正核發出去的Access Tokens,包含對應的Refresh Token

    ?

    routes.rb

    Doorkeeper 內建的4個部分:

    • Authorization Endpoint 和 Token Endpoint
    • Token Debug Endpoint (在implicit flow驗證token的真實性)
    • Client Registration Interface(crud)
    • User管理授權過的Clients的界面(可Revoke)

    ?

    ?

    ?

    ?

    ?

    ?

    ?


    ?作者最后表示完全弄懂的話,必須看HTML官方文檔。


    ?

    轉載于:https://www.cnblogs.com/chentianwei/p/9531091.html

    總結

    以上是生活随笔為你收集整理的OAuth简介(包含简明使用教程)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。