日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了通過使用外部IDP代理的KeyCloak進(jìn)行程序化用戶名/密碼訪問的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我正在使用Identity Brokering功能和外部IdP。因此,用戶登錄到外部IdP用戶界面,然后KeyCloak Broker客戶端從外部IdP接收J(rèn)WT令牌,KeyCloak提供JWT供我們訪問資源。我已經(jīng)設(shè)置了Default Identitiy Provider功能,以便在登錄時向用戶顯示外部IDP登錄屏幕。這意味著用戶及其密碼存儲在外部IdP上。

當(dāng)我需要在測試中以編程方式使用”Direct Access Grant”(資源所有者密碼授予)登錄時,會出現(xiàn)這個問題。由于密碼沒有存儲在KeyCloak上,登錄時我總是從KeyCloak收到401未經(jīng)授權(quán)的錯誤。當(dāng)我試圖更改用戶密碼時,它開始起作用了,所以問題是用戶密碼沒有在KeyCloak上提供,并且使用”Direct Access Grant”KeyCloak在編程登錄時不會調(diào)用外部IDP。

我使用以下代碼來獲取訪問令牌,但每次傳遞有效的用戶名/密碼時都會收到401錯誤。

org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 401 / Unauthorized

已為該客戶端啟用直接訪問授權(quán)。

public static String login(final Configuration configuration) {
    final AuthzClient authzClient = AuthzClient.create(configuration);
    final AccessTokenResponse accessTokenResponse = authzClient.obtainAccessToken(USERNAME, PASSWORD);
    return accessTokenResponse.getToken();
  }

有沒有辦法解決這個問題?例如,在”Direct Access Grant”上調(diào)用Identity Broker,以便KeyCloak向我們提供其有效令牌?

推薦答案

問題在于KeyCloak沒有來自初始身份提供者的有關(guān)密碼的信息。它們具有token exchange feature,應(yīng)用于編程令牌交換。

External Token to Interanal Token Exchange應(yīng)使用它。

下面是一個用Python語言編寫的示例代碼,它可以執(zhí)行此操作(只需在占位符中放置正確的值):

def login():
    idp_access_token = idp_login()
    return keycloak_token_exchange(idp_access_token)

def idp_login():
    login_data = {
        "client_id": <IDP-CLIENT-ID>,
        "client_secret": <IDP-CLIENT-SECRET>,
        "grant_type": <IDP-PASSWORD-GRANT-TYPE>,
        "username": <USERNAME>,
        "password": <PASSWORD>,
        "scope": "openid",
        "realm": "Username-Password-Authentication"
    }
    login_headers = {
        "Content-Type": "application/json"
    }
    token_response = requests.post(<IDP-URL>, headers=login_headers, data=json.dumps(login_data))
    return parse_response(token_response)['access_token']

def keycloak_token_exchange(idp_access_token):
    token_exchange_url = <KEYCLOAK-SERVER-URL> + '/realms/master/protocol/openid-connect/token'
    data = {
        'grant_type': 'urn:ietf:params:oauth:grant-type:token-exchange',
        'subject_token': idp_access_token,
        'subject_issuer': <IDP-PROVIDER-ALIAS>,
        'subject_token_type': 'urn:ietf:params:oauth:token-type:access_token',
        'audience': <KEYCLOAK-CLIENT-ID>
    }
    response = requests.post(token_exchange_url, data=data,
                             auth=(<KEYCLOAK-CLIENT-ID>, <KEYCLOAK-CLIENT-SECRET>))
    logger.info(response)
    return parse_response(response)['access_token']

這篇關(guān)于通過使用外部IDP代理的KeyCloak進(jìn)行程序化用戶名/密碼訪問的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標(biāo)簽:IdP KeyCloak 代理 密碼 用戶名 程序化 訪問
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定