日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

ASM集成阿里云IDaaS實現網格內應用單點登錄

本文介紹如何在ASM中實現網格內應用的單點登錄。

前提條件

背景信息

當前很多應用都需要進行訪問控制,登錄成功的用戶才有權限訪問。隨著系統復雜度的提升,“單點登錄”成為了一個很好的解決方案,您可以使用一個賬號登錄多個系統。ASM提供的自定義授權服務,可以無侵入地實現網格內應用的單點登錄。

使用ASM實現單點登錄,可以降低應用的改造、運維等成本。本文使用阿里云IDaaS實例作為身份提供方,實現單點登錄到網格內應用服務。網格內應用無需實現認證、鑒權邏輯,通過配置ASM自定義鑒權接入到阿里云IDaaS或任意支持OIDC協議的IdP進行鑒權和登錄流程,鑒權通過后,將應用的請求以及認證信息一同發往應用,應用可基于身份信息進行相應業務處理。

相關概念

概念

說明

IdP

Identity Provider的縮寫,身份提供商。例如,您可以通過賬號+密碼的形式來驗證您的身份。當您使用支付寶賬號登錄優酷,這個場景中支付寶即為IdP。

OIDC

OIDC是OpenID Connect的簡稱,是一個基于OAuth 2.0協議的身份認證標準協議。更多信息,請參見OpenID Connect

Scope

OIDC中的概念,每一個IdP同時也保存了用戶的各種信息,例如Email、個人資料等,這些分類被稱為Scope。在通過IdP進行Authentication(登錄操作)時,一些IdP會要求選擇允許訪問用戶的哪些資料,每一個類別都對應一個Scope。

步驟一:創建EIAM云身份服務實例及測試賬號

  1. 登錄EIAM云身份服務控制臺,創建IDaaS實例。具體操作,請參見免費開通實例

    說明

    一個IDaaS實例可以被視為一個賬號系統。創建一個IDaaS實例,相當于創建了一個獨立的賬號系統。

  2. EIAM 云身份服務頁面,單擊目標IDaaS實例名稱。

  3. 在左側導航欄,選擇賬戶 > 賬戶與組織

  4. 賬戶頁面的賬戶頁簽,單擊創建賬戶

  5. 創建賬戶面板,設置賬戶信息,然后單擊確定

步驟二:添加和配置OIDC應用

您可以將IDaaS實例中的應用理解為接口。IDaaS實例可以用不同的應用暴露接口,以各種方式進行單點登錄。本文使用OIDC應用進行演示。

  1. 在云身份服務控制臺左側導航欄,單擊應用

  2. 應用頁面,單擊添加應用

  3. 添加應用頁面,單擊標準協議頁簽,在OIDC卡片中單擊添加應用

  4. 添加應用 - OIDC 協議對話框,配置應用名稱,然后單擊立即添加

  5. OIDC應用詳情頁面,選擇登錄訪問 > 單點登錄

  6. 單點登錄配置頁面,設置登錄Redirect URI。單擊顯示高級配置,在用戶信息范圍,選擇您需要獲取的信息,然后單擊保存

    URL

    說明

    本例中的Redirect URI設置為http://${ASM網關的CLB地址}/oauth2/callback。請將${}替換為您實際的地址。

  7. OIDC應用詳情頁面,選擇登錄訪問 > 授權,然后單擊添加授權

  8. 添加應用授權對話框,為步驟一創建的用戶授權,然后單擊保存授權

完成OIDC應用的配置后,您需要記錄當前應用的Issuerclient_idclient_secret等配置信息,以便在ASM中配置單點登錄使用。

  • Issuer:在OIDC應用的登錄訪問 > 單點登錄 > 應用配置信息區域獲取。Issuer

  • client_idclient_secret:在OIDC應用的通用配置區域獲取。id

步驟三:部署測試應用并將其暴露于網關

本文使用httpbin應用作為測試,該應用可以輔助查看請求內容,便于驗證登錄后從IdP處獲取的信息。

  1. 使用以下內容,在ACK集群的default命名空間下部署httpbin應用。

    展開查看YAML內容

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. 使用以下內容,在ASM控制臺配置網關規則至對應的ASM實例。具體操作,請參見管理網關規則

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: ingressgateway
      namespace: istio-system
    spec:
      selector:
        app: istio-ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: http
            number: 80
            protocol: HTTP
  3. 使用以下內容,將虛擬服務應用到ASM實例。具體操作,請參見管理虛擬服務

    該虛擬服務指定了一條指向httpbin應用的默認路由規則。

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: ingressgateway-vs
      namespace: istio-system
    spec:
      gateways:
        - ingressgateway
      hosts:
        - '*'
      http:
        - name: default
          route:
            - destination:
                host: httpbin.default.svc.cluster.local
                port:
                  number: 8000
  4. 配置完網關規則和虛擬服務后,您可以直接通過curl -I http://${ASM網關外部IP:80}命令,訪問httpbin服務。

    示例輸出:httpbin

步驟四:啟用ASM自定義授權服務,配置OIDC單點登錄

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇網格安全中心 > 自定義授權服務,然后單擊關聯自定義授權服務

  3. 關聯自定義授權服務頁面,單擊OIDC身份認證授權服務頁簽,進行相關配置,然后單擊創建

    說明

    OIDC應用的相關信息由步驟二獲取。您可以使用ASM網關作為登錄重定向地址。關于Cookie Secret的更多信息,請參見Cookie Secret的生成

  4. 使用數據平面集群KubeConfig,執行以下命令,獲取OIDC外部授權服務域名。

    kubectl get svc -n istio-system|grep oauth2proxy|awk -F' ' '{print $1}'
  5. 使用以下內容,創建VirtualService,接收ASM網關的認證請求。

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: oauth2-vs
      namespace: istio-system
    spec:
      gateways:
        - ingressgateway
      hosts:
        - '*'
      http:
        - match:
            - uri:
                prefix: /oauth2
          name: oauth2
          route:
            - destination:
                host: # 上一步獲取的外部授權服務域名。
                port:
                  number: 4180
    重要

    為防止VirtualService沖突,請勿將其他VirtualService匹配前綴為/oauth2的路徑。

步驟五:創建授權策略

  1. 在網格詳情頁面左側導航欄,選擇網格安全中心 > 授權策略,然后在右側頁面,單擊使用YAML創建

  2. 創建頁面,選擇命名空間場景模板,配置如下YAML,然后單擊創建

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: oidc
      namespace: istio-system
    spec:
      action: CUSTOM
      provider:
        name: httpextauth-oidc  # 上面創建的自定義授權策略的名稱。
      rules:
        - {}
      selector:
        matchLabels:
          istio: ingressgateway
    說明

    該權限策略會對所有進入ASM網關的請求進行授權。

步驟六:結果驗證

  1. 在瀏覽器中訪問http://${ASM網關外部IP:80}

    顯示如下頁面,說明單點登錄生效。1

  2. 單擊Sign in with OpenID Connect

    預期結果:阿里云IDaaS

  3. 阿里云IDaaS的登錄頁面,輸入步驟一創建的測試賬號以及密碼,然后單擊登錄

    預期結果:httpbin

  4. 單擊Request inspection,選擇/headers > try it out > Execute

    預期結果:12

  5. 將上一步驟中Bearer之后請求攜帶的JWT在JWT Debugger中進行解析。

    關于JWT Debugger的更多信息,請參見JWT debugger

    預期結果:JWT解析成功后,您可以看到如上信息。其中附帶IDaaS中存儲的用戶信息,并且當前的JWT已經經過了ASM的校驗。