簡體   English   中英

訪問SCIM API-Keyrock Fiware

[英]Access SCIM API - Keyrock Fiware

我在Docker容器( https://hub.docker.com/r/fiware/idm/ )中使用了fiware-idm映像,並且嘗試訪問SCIM API。 有一個用戶“ idm”(默認用戶),他是提供者,並且具有所有權限。 但是當我嘗試獲得所有用戶時:

private String getAccessToken() {
    HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    HttpSession session = httpServletRequest.getSession();
    String accessToken = (String) session.getAttribute("access_token");
    return accessToken;
}

public void getUsers() throws IOException {
    String accessToken = getAccessToken(); 

    Client client = ClientBuilder.newClient();
    Response response = client.target("http://192.168.99.100:5000/v3/projects")
      .request(MediaType.TEXT_PLAIN_TYPE)
      .header("X-Auth-token", accessToken)
      .get();

    setResultUsersList("-- status: " + response.getStatus() + " <br>" 
            + "-- headers: " + response.getHeaders() + " <br>"
            + "-- body: " + response.readEntity(String.class) + " <br>"
            + "-- token: " + accessToken);
}

我收到一個錯誤消息:{“錯誤”:{“消息”:“您發出的請求需要驗證。”,“代碼”:401,“標題”:“未經授權”}}

但是身份驗證有效,並且也可以獲取用戶信息:

public void authenticateUser() throws OAuthSystemException, IOException {
    HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

    OAuthClientRequest codeRequest = OAuthClientRequest
            .authorizationLocation("http://192.168.99.100:8000/oauth2/authorize")
            .setParameter("response_type", "code")
            .setClientId(CLIENT_ID)
            .setRedirectURI("http://localhost:8080/Example-Application-Security-UI/auth")
            .buildQueryMessage();

    httpServletResponse.sendRedirect(codeRequest.getLocationUri());
}

public void requestUserInfo() {
    HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    HttpSession session = httpServletRequest.getSession();
    accessToken = (String) session.getAttribute("access_token");

    String strJson = callWebservice("http://192.168.99.100:8000/user?access_token=" + accessToken);
    JSONObject jsonObject = new JSONObject(strJson);
    resultUserInfo = jsonObject.toString();
}

向Keystone發出請求時所需的X-Auth-Token標頭要求使用Keystone令牌作為值,而不是您當前提供的OAuth2訪問令牌。

您可以通過對身份驗證端點的POST請求來獲取Keystone令牌。 由於Keystone支持的一種身份驗證方法是OAuth2,因此您甚至可以使用從OAuth2身份驗證獲得的訪問令牌來獲取Keystone令牌:

POST  /v3/auth/tokens
body:

 "auth": {
        "identity": {  
            "methods": [
                "oauth2"
            ],
            "oauth2": {
                'access_token_id': access_token
            }
        }
    }

現在,您可以使用Keystone令牌執行對SCIM API(或對經過身份驗證的用戶具有權限的任何API端點)的請求。

希望這對您有所幫助!

請注意,獲取用戶信息的請求是有效的,因為它是針對Horizo​​n中的終結點而不是Keystone終結點執行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM