中央授權中心OIDC支持

分類 授權類型 支持情況 說明
有用戶參與 授權碼模式
authorization code
支持 最常用的安全模式。此模式下HQiT中央授權中心同時支持OAuth2.0擴展協議PKCE。
密碼模式
password
支持,不對外開放 涉及到用戶相信密碼,不對外開放。
隱式授權模式
implicit
不支持 redirect_uri直接帶上Token,不安全。
混合模式
hybrid
不支持 相當于authorization code與implicit模式混合。
同樣redirect_uri直接帶上Token,不安全。
無用戶參與 客戶端模式
client credentials
支持 僅可得到AccessToken,無IDToken、RefreshToken。
無須刷新Token。

HQiT 中央授權中心業務流程圖如下:

HQiT 中央授權中心包含一些職責和功能:

  • 保護你的資源(包括個人身份資訊、集團網站的WebAPI)
  • 使用相信掃一掃、動態安全碼、Fido設備、人臉識別對用戶進行身份驗證
  • 提供會話管理和單點登錄(SSO)
  • 管理和驗證客戶端(集團接入系統)
  • 向客戶端(集團接入系統)發放身份和訪問令牌(即:ID Token和Access Token)
  • 驗證令牌


1)發現端點(Discovery Endpoint)

請求方式:GET

發現端點可用于檢索有關中央授權中心的元數據 - 它返回發布者名稱,密鑰材料,支持的范圍等信息。有關詳細信息,請參閱規范

HQiT 中央授權中心的發現端點為:https://sso.foxconn.com/.well-known/openid-configuration



2)授權端點(Authorize Endpoint)

地址:https://sso.foxconn.com/connect/authorize
請求方式:GET
其它地址
地址1:https://sso.foxconn.com/Account/Login
地址2:https://sso.foxconn.com/connect/iframe_authz

授權端點可用于通過瀏覽器請求令牌或授權碼。此過程通常涉及最終用戶的身份驗證和可選的同意。

注意 HQiT 中央授權中心支持OpenID Connect和OAuth 2.0授權請求參數的子集。有關完整列表,請參見此處

  • client_id
    客戶的標識符(必填)。

  • scope
    一個或多個注冊范圍(必填)

  • redirect_uri
    必須與該客戶端允許的重定向URI之一完全匹配(必需)

  • response_type

    • code 請求授權碼
    • id_token 請求身份令牌(僅允許身份范圍)
    • token 請求訪問令牌(僅允許資源范圍)
    • id_token token 請求身份令牌和訪問令牌
    • code id_token 請求授權代碼和身份令牌
    • code id_token token 請求授權代碼,身份令牌和訪問令牌
  • response_mode

    • form_post 將令牌響應作為表單發送而不是片段編碼重定向(可選)
  • state
    中央授權中心將回傳令牌響應的狀態值,這是針對客戶端和提供者之間的往返狀態,增強返回值的安全性。客戶端可根據此值在記錄用戶登錄狀態之后,跳至對應的內容頁面。(推薦的)

  • nonce
    中央授權中心將回傳身份令牌中的nonce值,這樣可增加返回值的安全。 通過隱式授權對身份令牌是必需的。

  • code_challenge
    發送PKCE的代碼質詢

  • code_challenge_method
    plain表示挑戰是使用純文本(不推薦) S256表示使用SHA256對挑戰進行哈希處理

  • login_hint
    可用于預先填寫登錄頁面上的用戶名字段

GET /connect/authorize?
    client_id=client1&
    scope=openid profile foxconn civet.api.msg&
    response_type=code&
    redirect_uri=https://mybu.foxconn.com/callback&
    state=abc&
    nonce=xyz

(刪除了URL編碼,并添加了換行符以提高可讀性)



3)令牌端點(Token Endpoint)

地址:https://sso.foxconn.com/connect/token
請求方式:POST
Content-Type:application/x-www-form-urlencoded

令牌端點可用于以編程方式請求令牌。它支持authorization_codeclient_credentialspasswordrefresh_token的類型。

注意 HQiT 中央授權中心支持OpenID Connect和OAuth 2.0授權請求參數的子集。有關完整列表,請參見此處

  • client_id
    客戶標識符(必填)

  • client_secret
    客戶端密鑰

  • grant_type authorization_codeclient_credentialspasswordrefresh_token

  • scope
    一個或多個注冊范圍。如果未指定,將發出所有明確允許范圍的標記。

  • redirect_uri
    authorization_code授權類型所需

  • code
    授權代碼(authorization_code授權類型需要)

  • code_verifier
    PKCE證明密鑰

  • username
    資源所有者用戶名(password授權類型所需)

  • password
    資源所有者密碼(password授予類型所需)

  • refresh_token
    刷新令牌(refresh_token授予類型所需)

POST /connect/token

    client_id=client1&
    client_secret=secret&
    grant_type=authorization_code&
    code=[授權端點重載頁面時帶上的code參數值]&
    redirect_uri=https://mybu.foxconn.com/callback


4)UserInfo端點(UserInfo Endpoint)

地址:https://sso.foxconn.com/connect/userinfo
請求方式:GET
Content-Type:application/json
Authorization: Bearer <access_token>

UserInfo端點可用于檢索有關用戶的身份信息(請參閱規范)。

調用者需要發送代表用戶的有效訪問令牌。根據授予的范圍,UserInfo端點將返回映射的聲明(至少需要openid作用域)。

示例

GET /connect/userinfo
    Authorization: Bearer <access_token>
    HTTP/1.1 200 OK
    Content-Type: application/json
    
    {
        "sub": "FX000001",
        "emp_no": "FX000001",
        "name": "相信大使",
        "area":"龍華",
        "bg":"中央單位",
        "bu":"中央資訊總處",
        "company":"富泰華工業(深圳)有限公司",
        "cost_code":"DAAB07",
        "birthdate":"2000/01/01",
        "class":"師1",
        "job_title":"大使",
        "hiredate":"2015-08-10",
        "email":"civet-helpdesk@mail.foxconn.com",
        "picture":"https://icivetmedia.foxconn.com/group1/M00/39/67/CoaWx14kDPaENfGQAAAAALnmmck62.jpeg",
        "role": [
            "簡單角色設定值1",
            "簡單角色設定值2"
        ]
    }


5)結束會話端點(End Session Endpoint)

地址:https://sso.foxconn.com/connect/endsession
請求方式:GET

結束會話端點可用于觸發單點注銷(請參閱規范)。

要使用結束會話端點,客戶端應用程序會將用戶的瀏覽器重定向到結束會話URL。用戶在會話期間通過瀏覽器登錄的所有應用程序都可以參與注銷。

  • id_token_hint
    當前用戶的IDToken,此值用來繞過系統提示,無此值時系統會提示用戶是否真的想要注銷。

  • post_logout_redirect_uri
    如果id_token_hint有效傳遞了,則客戶端也可以發送post_logout_redirect_uri參數。這可用于允許用戶在注銷后重定向回客戶端。該值必須與客戶端預先配置的PostLogoutRedirectUris。

  • State
    如果post_logout_redirect_uri有效,則客戶端也可以發送state參數。在用戶重定向回客戶端后,這將作為查詢字符串參數返回給客戶端。這通常由客戶端用于跨重定向的往返狀態。

GET /connect/endsession?
    id_token_hint=<當前用戶的IDToken>&
    post_logout_redirect_uri=https://myapp/logout&
    state=abc&

(刪除了URL編碼,并添加了換行符以提高可讀性)



6)刷新令牌之撤消端點(Revocation Endpoint)

地址:https://sso.foxconn.com/connect/revocation
請求方式:POST
Content-Type:application/x-www-form-urlencoded

此端點允許撤消刷新令牌。它實現了令牌撤銷規范(RFC 7009)。

結束會話端點可用于觸發單點注銷(請參閱規范)。

要使用結束會話端點,客戶端應用程序會將用戶的瀏覽器重定向到結束會話URL。用戶在會話期間通過瀏覽器登錄的所有應用程序都可以參與注銷。

  • token
    要撤銷的令牌(必填)

  • token_type_hint
    access_tokenrefresh_token(可選)

POST /connect/revocation HTTP/1.1
    Host: server.example.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
    
    token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token

(刪除了URL編碼,并添加了換行符以提高可讀性)



7)驗證令牌有效性

公鑰地址:https://sso.foxconn.com/.well-known/openid-configuration/jwks
JWT在線工具:https://jwt.io/

HQiT 中央授權中心的令牌為JWT標準格式,并采用RS256的簽名。

客戶端驗證令牌有效性主要有以下幾步:

  • 從JWT搭載的信息中判斷令牌是否在有效期內。

  • 通過公開的公鑰地址獲得公鑰,對JWT簽名部分進行驗證。