歡迎光臨
每天分享高質量文章

使用 Emacs 建立 OAuth 2.0 的 UML 序列圖 | Linux 中國

在審查 OAuth 2.0 實現或編寫滲透測試報告時我習慣畫出 UML 圖。這方便讓人理解發生了什麼事情,併發現潛在的問題。畢竟,一圖抵千言。

— Peter Mosmans

 

看起來 OAuth 2.0 框架[1] 已經越來越廣泛地應用於 web (和 移動) 應用。太棒了!

雖然協議本身並不複雜,但有很多的使用場景、流程和實現可供選擇。正如生活中的大多數事物一樣,魔鬼在於細節之中。

在審查 OAuth 2.0 實現或編寫滲透測試報告時我習慣畫出 UML 圖。這方便讓人理解發生了什麼事情,併發現潛在的問題。畢竟,一圖抵千言。

使用基於 GPL 開源協議 Emacs[2] 編輯器來實現,再加上基於 GPL 開源協議的工具 PlantUML[3] (也可以選擇基於 Eclipse Public 協議的 Graphviz[4]) 很容易做到這一點。

Emacs 是世界上最萬能的編輯器。在這種場景中,我們用它來編輯文字,並自動將文字轉換成圖片。PlantUML 是一個允許你用人類可讀的文字來寫 UML 並完成該轉換的工具。Graphviz 是一個視覺化的軟體,這裡我們可以用它來顯示圖片。

下載 預先編譯好了的 PlantUML jar 檔案 [5]Emacs[6] 還可以選擇下載並安裝 Graphviz[7]

安裝並啟動 Emacs,然後將下麵 Lisp 程式碼(實際上是配置)寫入你的啟動檔案中(~/.emacs.d/init.d),這段程式碼將會:

◈ 配置 org 樣式(一種用來組織並編輯文字檔案的樣式)來使用 PlantUML
◈ 將 plantuml 新增到可識別的 “org-babel” 語言中(這讓你可以在文字檔案中執行原始碼)
◈ 將 PlantUML 程式碼標註為安全的,從而允許執行
◈ 自動顯示生成的結果圖片
  1. ;; tell org-mode where to find the plantuml JAR file (specify the JAR file)
  2. (setq org-plantuml-jar-path (expand-file-name "~/plantuml.jar"))
  3. ;; use plantuml as org-babel language
  4. (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t)))
  5. ;; helper function
  6. (defun my-org-confirm-babel-evaluate (lang body)
  7. "Do not ask for confirmation to evaluate code for specified languages."
  8. (member lang '("plantuml")))
  9. ;; trust certain code as being safe
  10. (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
  11. ;; automatically show the resulting image
  12. (add-hook 'org-babel-after-execute-hook 'org-display-inline-images)

如果你還沒有啟動檔案,那麼將該程式碼加入到 ~/.emacs.d/init.el 檔案中然後重啟 Emacs。

提示:Control-c Control-f 可以讓你建立/開啟(新)檔案。Control-x Control-s 儲存檔案,而 Control-x Control-c 退出 Emacs。

這就結了!

要測試該配置,可以建立/開啟(Control-c Control-f)字尾為 .org 的檔案,例如 test.org。這會讓 Emacs 切換到 org 樣式並識別 “org-babel” 語法。

輸入下麵程式碼,然後在程式碼中輸入 Control-c Control-c 來測試是否安裝正常:

  1. #+BEGIN_SRC plantuml :file test.png
  2. @startuml
  3. version
  4. @enduml
  5. #+END_SRC

一切順利的話,你會在 Emacs 中看到文字下麵顯示了一張圖片。

註意:

要快速插入類似 #+BEGIN_SRC 和 #+END_SRC 這樣的程式碼片段,你可以使用內建的 Easy Templates 系統:輸入  然後按下 TAB,它就會自動為你插入模板。

還有更複雜的例子,下麵是生成上面圖片的 UML 原始碼:

  1. #+BEGIN_SRC plantuml :file t:/oauth2-abstract-protocol-flow.png
  2. @startuml
  3. hide footbox
  4. title Oauth 2.0 Abstract protocol flow
  5. autonumber
  6. actor user as "resource owner (user)"
  7. box "token stays secure" #FAFAFA
  8. participant client as "client (application)"
  9. participant authorization as "authorization server"
  10. database resource as "resource server"
  11. end box
  12. group user authorizes client
  13. client -> user : request authorization
  14. note left
  15. **grant types**:
  16. # authorization code
  17. # implicit
  18. # password
  19. # client_credentials
  20. end note
  21. user --> client : authorization grant
  22. end
  23. group token is generated
  24. client -> authorization : request token\npresent authorization grant
  25. authorization --> client :var: access token
  26. note left
  27. **response types**:
  28. # code
  29. # token
  30. end note
  31. end group
  32. group resource can be accessed
  33. client -> resource : request resource\npresent token
  34. resource --> client : resource
  35. end group
  36. @enduml
  37. #+END_SRC

你難道會不喜歡 Emacs 和開源工具的多功能性嗎?

 

贊(0)

分享創造快樂