2016-10-10 152 views
0

我在碼頭集裝箱中使用fiware-idm圖像(https://hub.docker.com/r/fiware/idm/),我嘗試訪問SCIM API。有用戶「idm」(默認用戶),他是提供者並擁有所有權限。但是,當我試圖讓所有用戶:訪問SCIM API - Keyrock Fiware

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(); 
} 

回答

0

發出請求梯形校正時,需輸入X-Auth-Token頭需要梯形令牌的價值,而不是OAuth2 acc您當前提供的ess標記。

您可以通過對認證端點的POST請求獲得Keystone令牌。由於在梯形支持的身份驗證方法之一是OAuth2用戶,你甚至可以使用令牌你從OAuth2用戶認證獲得的訪問獲得梯形令牌:

POST /v3/auth/tokens 
body: 

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

您現在可以使用梯形校正令牌執行請求到SCIM API(或授權用戶擁有權限的任何API端點)。

希望這對你有幫助!

請注意,獲取用戶信息的請求在對Horizo​​n中的端點執行操作之後起作用,而不是對Keystone端點執行。

+0

謝謝!它的工作,我正在與身體: –

+0

**與身體:....「方法」:[「密碼」] ...,但現在使用oauth2更好。謝謝! –

相關問題