2016-10-10 12 views
0

ドッキング用の容器(https://hub.docker.com/r/fiware/idm/)でfiware-idmイメージを使用していますが、SCIM APIにアクセスしようとしています。ユーザ "idm"(デフォルトユーザ)が存在し、彼はプロバイダであり、すべての権限を持っています。私はすべてのユーザーを取得しようとすると、しかし: "、401: {「エラー」:{「メッセージ」:「あなたが行ったリクエストが認証を必要とする」、「コード」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); 
} 

を私はエラーMSGを受け取りますタイトル ":『:、代わりの

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あなたが現在提供しているトークントークン。

POST要求によって認証エンドポイントにキーストーントークンを取得できます。以来キーストーンでサポートされている認証方法の一つはのOAuth2で、あなたも、キーストーン・トークンを取得するためにあなたがのOAuth2認証から取得したアクセストークンを使用することができます。

POST /v3/auth/tokens 
body: 

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

あなたは今すぐに要求を実行するためにキーストーン・トークンを使用することができますSCIM API(または認証されたユーザーに権限がある任意のAPIエンドポイント)に送信されます。

これはあなたのために役立ちますように!

ユーザー情報を取得する要求は、Keystoneエンドポイントではなく、Horizo​​nのエンドポイントに対して実行されているため、機能することに注意してください。

+0

ありがとうございました!それは働いて、私はボディで要求をしていました: –

+0

** body:.... "methods":["password"] ...しかし、今はoauth2を使う方が良いです。ありがとう! –

関連する問題