Creating an Authorization Plugin(創(chuàng)建一個(gè)授權(quán)插件)--Moya文檔

Creating an Authorization Plugin(創(chuàng)建一個(gè)授權(quán)插件)

API請(qǐng)求通過JWT或者另外類型的訪問令牌來授權(quán)是相當(dāng)常見的。在這個(gè)例子中我們將創(chuàng)建一個(gè)插件用來把jwt添加到請(qǐng)求中。首先,讓我們來看下這個(gè)例子,如何通過插件把jwt添加到一個(gè)請(qǐng)求中.

struct AuthPlugin: PluginType {
  let token: String

  func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
    var request = request
    request.addValue("Bearer " + token, forHTTPHeaderField: "Authorization")
    return request
  }
}

let provider = MoyaProvider<Target>(plugins: [AuthPlugin(token: "eyeAm.AJsoN.weBTOKen")])

現(xiàn)在我們來看下更加復(fù)雜的例子,當(dāng)我們創(chuàng)建插件時(shí)我們可能還沒有訪問到j(luò)wt,或者不是所有的請(qǐng)求都需要簽名(ps:即攜帶認(rèn)證). 我們可以通過擴(kuò)展TargetType協(xié)議來提供是否需要授權(quán)的信息并且使用閉包來提供一個(gè)令牌。這樣完成這個(gè)功能。

class TokenSource {
  var token: String?
  init() { }
}

protocol AuthorizedTargetType: TargetType {
  var needsAuth: Bool { get }
}

struct AuthPlugin: PluginType {
  let tokenClosure: () -> String?

  func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
    guard
      let token = tokenClosure(),
      let target = target as? AuthorizedTargetType,
      target.needsAuth
    else {
      return request
    }

    var request = request
    request.addValue("Bearer " + token, forHTTPHeaderField: "Authorization")
    return request
  }
}

let source = TokenSource()
let provider = MoyaProvider<Target>(
  plugins: [
    AuthPlugin(tokenClosure: { return source.token })
  ]
)

source.token = "eyeAm.AJsoN.weBTOKen"

總結(jié) 這小節(jié)的核心:

  1. 如何自定義授權(quán)插件,及復(fù)雜的授權(quán)插件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 構(gòu)建用戶管理微服務(wù)翻譯自:https://springuni.com 構(gòu)建用戶管理微服務(wù)(一):定義領(lǐng)域模型和 R...
    極樂君閱讀 1,668評(píng)論 0 10
  • 轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld,違者必究。 本文目錄: 一、單體應(yīng)用 VS 微服務(wù) 二、微服務(wù)常見安...
    72a1f772fe47閱讀 8,739評(píng)論 3 25
  • 1. 微服務(wù)架構(gòu)介紹 1.1 什么是微服務(wù)架構(gòu)? 形像一點(diǎn)來說,微服務(wù)架構(gòu)就像搭積木,每個(gè)微服務(wù)都是一個(gè)零件,并使...
    靜修佛緣閱讀 6,808評(píng)論 0 39
  • 一、安全 安全是方便的敵人,反之亦然。對(duì)于虛擬或真實(shí)的系統(tǒng),從物理入口到網(wǎng)絡(luò)銀行平臺(tái),這一說法是真實(shí)的。工程師不斷...
    y0ngb1n閱讀 3,303評(píng)論 0 19

友情鏈接更多精彩內(nèi)容