Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Hi, I am Luka Huang ( Hi, I am Luka Huang ( ). ). A backend engineer work for A backend engineer work for .. @codingluka @codingluka Splashtop Splashtop

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

常常就有⼈問我⼀個問題 常常就有⼈問我⼀個問題

Slide 6

Slide 6 text

Splashtop 跟 Teamviewer 有什麼不同? Splashtop 跟 Teamviewer 有什麼不同?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

How to integrate ADFS or Azure How to integrate ADFS or Azure AD with Rails AD with Rails

Slide 9

Slide 9 text

在了解如何去整合 ADFS 或 Azure AD 到 Rails 之前 在了解如何去整合 ADFS 或 Azure AD 到 Rails 之前

Slide 10

Slide 10 text

有⼀個更重要的問題需要去了解 有⼀個更重要的問題需要去了解

Slide 11

Slide 11 text

就是為什麼我們要去把 AD 跟 Rails 整合? 就是為什麼我們要去把 AD 跟 Rails 整合?

Slide 12

Slide 12 text

⽤ Oauth 2.0 不就好了嘛? ⽤ Oauth 2.0 不就好了嘛?

Slide 13

Slide 13 text

我們已經有會員系統了, 我們已經有會員系統了, 為什麼還要去整合 AD 呀? 為什麼還要去整合 AD 呀?

Slide 14

Slide 14 text

相信⼤家現在很疑惑 相信⼤家現在很疑惑

Slide 15

Slide 15 text

沒事我們去碰 Microsoft 的東⻄幹嘛? 沒事我們去碰 Microsoft 的東⻄幹嘛?

Slide 16

Slide 16 text

所以今天⾸先要介紹的是 所以今天⾸先要介紹的是 Why we integrate AD with Rails? Why we integrate AD with Rails?

Slide 17

Slide 17 text

Why we integrate AD with Rails? Why we integrate AD with Rails?

Slide 18

Slide 18 text

在知道「為什麼要整合 AD 跟 Rails ?」之前,有幾 在知道「為什麼要整合 AD 跟 Rails ?」之前,有幾 個問題需要了解 個問題需要了解

Slide 19

Slide 19 text

Three Questions: Three Questions: What is AD? What is AD? What is SAML? What is SAML? Why we integrate AD with Rails? Why we integrate AD with Rails?

Slide 20

Slide 20 text

What is AD? What is AD?

Slide 21

Slide 21 text

AD (Active Directory) AD (Active Directory)

Slide 22

Slide 22 text

Rails Developer 可能對 Active Directory 比較不熟悉 Rails Developer 可能對 Active Directory 比較不熟悉

Slide 23

Slide 23 text

⼤部分的情況下 Rails Developer 不會想要使⽤ AD ⼤部分的情況下 Rails Developer 不會想要使⽤ AD 來做權限管理 來做權限管理

Slide 24

Slide 24 text

有⼈知道為什麼嘛? 有⼈知道為什麼嘛?

Slide 25

Slide 25 text

因為 AD 長這樣!! 因為 AD 長這樣!!

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

圖形化介⾯ + Windows 圖形化介⾯ + Windows 恐怖吧!! 恐怖吧!!

Slide 28

Slide 28 text

不過不⽤害怕 不過不⽤害怕

Slide 29

Slide 29 text

因為呢,AD 由客⼾的公司的 IT 部⾨負責管理。 因為呢,AD 由客⼾的公司的 IT 部⾨負責管理。

Slide 30

Slide 30 text

Rails Application 只需要提供串接的接⼝就可以了。 Rails Application 只需要提供串接的接⼝就可以了。

Slide 31

Slide 31 text

AD 是 Windows 的權限管理系統, AD 是 Windows 的權限管理系統, 我們來看⼀下 AD 的結構圖 我們來看⼀下 AD 的結構圖

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

AD 的存在,對 IT 來說是⼀個基礎的技能 AD 的存在,對 IT 來說是⼀個基礎的技能

Slide 34

Slide 34 text

可以看⼀下 AD 的出版物 可以看⼀下 AD 的出版物

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

英⽂的出版物也很多 英⽂的出版物也很多

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

更神奇的是 更神奇的是

Slide 41

Slide 41 text

居然有 Active Directory 的 Conference 居然有 Active Directory 的 Conference

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

可以說 Active Directory 可以說 Active Directory 對 IT 來說是⼀個很重要的項⽬ 對 IT 來說是⼀個很重要的項⽬

Slide 44

Slide 44 text

What is SAML? What is SAML?

Slide 45

Slide 45 text

SAML - Security Assertion Markup Language SAML - Security Assertion Markup Language Security 安全 Security 安全 Assestion 斷⾔ Assestion 斷⾔ Markup Language 標記式語⾔ Markup Language 標記式語⾔

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

名詞解釋: 名詞解釋: IdP – Identity Provider IdP – Identity Provider SP – Service Provider SP – Service Provider SSO – Single Sign-on SSO – Single Sign-on

Slide 48

Slide 48 text

跟 Oauth 的使⽤者體驗幾乎⼀樣 跟 Oauth 的使⽤者體驗幾乎⼀樣

Slide 49

Slide 49 text

差別在於 Oauth 是去跟第三⽅服務去做認證 差別在於 Oauth 是去跟第三⽅服務去做認證

Slide 50

Slide 50 text

⽽ SAML 是使⽤客⼾公司的權限管理系統來做認 ⽽ SAML 是使⽤客⼾公司的權限管理系統來做認 證,這個權限管理系統就是 AD。 證,這個權限管理系統就是 AD。

Slide 51

Slide 51 text

Why we integrate AD with Rails? Why we integrate AD with Rails?

Slide 52

Slide 52 text

既然可以讓客⼾的 IT 部⾨來做認證 既然可以讓客⼾的 IT 部⾨來做認證

Slide 53

Slide 53 text

這樣客⼾就不需要到 Service Provider 申請帳號。 這樣客⼾就不需要到 Service Provider 申請帳號。

Slide 54

Slide 54 text

例如: 現在 Splashtop 提供遠端桌⾯的服務提供者。 例如: 現在 Splashtop 提供遠端桌⾯的服務提供者。

Slide 55

Slide 55 text

客⼾卻可以⽤⾃⼰的 AD 來管理帳號。 客⼾卻可以⽤⾃⼰的 AD 來管理帳號。

Slide 56

Slide 56 text

⽤⾃⼰內部網路來做認證。 ⽤⾃⼰內部網路來做認證。

Slide 57

Slide 57 text

總結⼀下,為什麼我們要串接 Rails 與 AD 總結⼀下,為什麼我們要串接 Rails 與 AD

Slide 58

Slide 58 text

因為我們可以提供客⼾⼀個很可靠的選擇 - 讓客⼾ 因為我們可以提供客⼾⼀個很可靠的選擇 - 讓客⼾ ⾃⾏做帳號的驗證。 ⾃⾏做帳號的驗證。

Slide 59

Slide 59 text

通常會需要使⽤到 AD 的公司比較⼤型的公司,才 通常會需要使⽤到 AD 的公司比較⼤型的公司,才 會有資源來做權限管理。 會有資源來做權限管理。

Slide 60

Slide 60 text

所以我們可以藉由整合 AD 與 Rails,來獲取更多的 所以我們可以藉由整合 AD 與 Rails,來獲取更多的 企業⽤⼾。 企業⽤⼾。

Slide 61

Slide 61 text

接下來進入下⼀章 接下來進入下⼀章

Slide 62

Slide 62 text

Topics Topics Introduce SAML in details Introduce SAML in details Introduce SSO and SLO Introduce SSO and SLO Introduce ADFS? Introduce ADFS? Introduce Azure AD? Introduce Azure AD? How to integrate ADFS/Azure AD with Rails How to integrate ADFS/Azure AD with Rails

Slide 63

Slide 63 text

Introduce to SAML in details Introduce to SAML in details

Slide 64

Slide 64 text

我們來看⼀下 SAML 這個協定是怎麼運作的。 我們來看⼀下 SAML 這個協定是怎麼運作的。

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

Source: Source: SSTC SAML Tech Overview 2.0 SSTC SAML Tech Overview 2.0

Slide 67

Slide 67 text

Step 2 - Service Provider ⽤ Form 的型式發出 Step 2 - Service Provider ⽤ Form 的型式發出 Request 通知 Browser Request 通知 Browser < /> > < > document.form[0].submit(); document.form[0].submit(); >

Slide 68

Slide 68 text

Step 3 - POST SAML infos to identity provider Step 3 - POST SAML infos to identity provider < > < >https://identity-provider.example.com/SAML2 https://identity-provider.example.com/SAML2< < < >

Slide 69

Slide 69 text

接著來看 step 4, 5, 6 接著來看 step 4, 5, 6

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

Step 6 傳送的資料 Step 6 傳送的資料 < /> > < > document.form[0].submit(); document.form[0].submit(); >

Slide 72

Slide 72 text

Step 7 - 最重要的⼀步 Step 7 - 最重要的⼀步 Browser 從 Identity Provider 拿到 Assertion 後, Browser 從 Identity Provider 拿到 Assertion 後, 由 Service Provider 的 Assertion Consumer 由 Service Provider 的 Assertion Consumer Service 做驗證 Service 做驗證 驗證成功即可確定 Browser 為合法使⽤者。 驗證成功即可確定 Browser 為合法使⽤者。

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

資料範例,注意到裡⾯有⼀個 資料範例,注意到裡⾯有⼀個 > < >https://idp.example.org/SAML2 https://idp.example.org/SAML2 > < > < > > <

Slide 75

Slide 75 text

Assertion - 斷⾔使⽤者是否合法 Assertion - 斷⾔使⽤者是否合法 < > < >https://idp.example.org/SAML2 https://idp.example.org/SAML2 > < >... ... > .......... .......... > <

Slide 76

Slide 76 text

我們再看⼀次這張圖,可以發現… 我們再看⼀次這張圖,可以發現…

Slide 77

Slide 77 text

Service Provider 沒有直接跟 Identity Provider 做溝 Service Provider 沒有直接跟 Identity Provider 做溝 通 通

Slide 78

Slide 78 text

這意味著什麼事情呢? 這意味著什麼事情呢?

Slide 79

Slide 79 text

Identity Provider 可以是內部網路。 Identity Provider 可以是內部網路。 這點非常的重要。 這點非常的重要。

Slide 80

Slide 80 text

因為有這個特性, 因為有這個特性, 企業得以不透過外部網路來做認證。 企業得以不透過外部網路來做認證。

Slide 81

Slide 81 text

企業可以使⽤內部的 AD 來做認證。 企業可以使⽤內部的 AD 來做認證。

Slide 82

Slide 82 text

這對很多企業來說,是非常有誘因的。 這對很多企業來說,是非常有誘因的。

Slide 83

Slide 83 text

因為很多企業不願意把資料放在外部。 因為很多企業不願意把資料放在外部。

Slide 84

Slide 84 text

希望⾃⼰保存資料。 希望⾃⼰保存資料。

Slide 85

Slide 85 text

如果你想要跟這些企業做⽣意。 如果你想要跟這些企業做⽣意。

Slide 86

Slide 86 text

SAML 可以幫助你達到。 SAML 可以幫助你達到。

Slide 87

Slide 87 text

SSO and SLO SSO and SLO

Slide 88

Slide 88 text

SSO (Single Sign On) SSO (Single Sign On)

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

SLO (Single Log Out) SLO (Single Log Out)

Slide 91

Slide 91 text

SAML Single Logout - What You Need to Know | SAML Single Logout - What You Need to Know |

Slide 92

Slide 92 text

What is ADFS? What is ADFS?

Slide 93

Slide 93 text

ADFS - Active Directory Federation Services ADFS - Active Directory Federation Services

Slide 94

Slide 94 text

是⼀種可以讓 Active Directory(AD) 加入的服務。 是⼀種可以讓 Active Directory(AD) 加入的服務。

Slide 95

Slide 95 text

整合陸續加入的 AD,進⽽逹到跨網域的控管。 整合陸續加入的 AD,進⽽逹到跨網域的控管。

Slide 96

Slide 96 text

這樣的特性剛好可以跟單⼀認證系統SSO做互相的 這樣的特性剛好可以跟單⼀認證系統SSO做互相的 整合與應⽤ 整合與應⽤

Slide 97

Slide 97 text

No content

Slide 98

Slide 98 text

What is Azure AD? What is Azure AD?

Slide 99

Slide 99 text

Azure AD 使⽤介⾯ Azure AD 使⽤介⾯

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

架構 架構

Slide 102

Slide 102 text

How to integrate Azure AD / How to integrate Azure AD / ADFS with Rails? ADFS with Rails?

Slide 103

Slide 103 text

Open Source Solution Open Source Solution ruby-saml by Onelogin ruby-saml by Onelogin

Slide 104

Slide 104 text

Onelogin 是⼀家怎麼樣的公司呢? Onelogin 是⼀家怎麼樣的公司呢?

Slide 105

Slide 105 text

它整合了 jira, BOX, Google Drive …等等的服務,應 它整合了 jira, BOX, Google Drive …等等的服務,應 有盡有。 有盡有。

Slide 106

Slide 106 text

No content

Slide 107

Slide 107 text

Part 1 - Rails Part 1 - Rails onelogin/ruby-saml-example onelogin/ruby-saml-example

Slide 108

Slide 108 text

有幾個重點 有幾個重點

Slide 109

Slide 109 text

metadata metadata class class SamlController SamlController < ApplicationController < ApplicationController . . . . . . def def metadata metadata settings = Account.get_saml_settings(get_url_base) settings = Account.get_saml_settings(get_url_base) meta = OneLogin::RubySaml::Metadata.new meta = OneLogin::RubySaml::Metadata.new render render :xml :xml => meta.generate(settings, => meta.generate(settings, true true) ) end end . . . . .

Slide 110

Slide 110 text

SAML settings SAML settings class class Account Account < ActiveRecord::Base < ActiveRecord::Base def def self self. .get_saml_settings get_saml_settings(url_base) (url_base) # this is just for testing purposes. # this is just for testing purposes. # should retrieve SAML-settings based on subdomain, IP-ad # should retrieve SAML-settings based on subdomain, IP-ad settings = OneLogin::RubySaml::Settings.new settings = OneLogin::RubySaml::Settings.new url_base url_base || ||= = "http://localhost:3000" "http://localhost:3000" # Example settings data, replace this values! # Example settings data, replace this values! # When disabled, saml validation errors will raise an exc # When disabled, saml validation errors will raise an exc settings.soft = settings.soft = true true #SP section #SP section settings issuer = url base + settings.issuer = url base + "/sa "/sa

Slide 111

Slide 111 text

SSO SSO class class SamlController SamlController < ApplicationController < ApplicationController . . . . . . def def sso sso settings = Account.get_saml_settings(get_url_base) settings = Account.get_saml_settings(get_url_base) if if settings. settings.nil nil? ? render render :action :action => => :no_settings :no_settings return return end end request = OneLogin::RubySaml::Authrequest.new request = OneLogin::RubySaml::Authrequest.new redirect to(request create(settings)) redirect to(request.create(settings))

Slide 112

Slide 112 text

ACS - Assertion Consumer Service ACS - Assertion Consumer Service class class SamlController SamlController < ApplicationController < ApplicationController . . . . . . def def acs acs settings = Account.get_saml_settings(get_url_base) settings = Account.get_saml_settings(get_url_base) response = OneLogin::RubySaml::Response.new(params[ response = OneLogin::RubySaml::Response.new(params[:SAMLR :SAMLR if if response.is_valid? response.is_valid? session[ session[:nameid :nameid] = response.nameid ] = response.nameid session[ session[:attributes :attributes] = response.attributes ] = response.attributes @attrs = session[ @attrs = session[:attributes :attributes] ] logger info logger.info "Sucessfully logged" "Sucessfully logged"

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

Part 2 - ADFS Part 2 - ADFS 我準備了⼀個教學,說明如何設定 ADFS 跟 Rails 串 我準備了⼀個教學,說明如何設定 ADFS 跟 Rails 串 接。 接。 StevenTTuD/how-to-set-up-adfs-with-saml StevenTTuD/how-to-set-up-adfs-with-saml

Slide 115

Slide 115 text

非常突然的,今天的簡報結束了。 非常突然的,今天的簡報結束了。

Slide 116

Slide 116 text

Thanks for listening Thanks for listening

Slide 117

Slide 117 text

References References AD architecture diagram AD architecture diagram sstc-saml-tech-overview-2.0-draft-03.pdf sstc-saml-tech-overview-2.0-draft-03.pdf