![](/img/trans.png)
[英]Fiware KeyRock SCIM API bug: _check_allowed_to_get_and_assign() got an unexpected keyword argument 'userName'
[英]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端點)的請求。
希望這對您有所幫助!
請注意,獲取用戶信息的請求是有效的,因為它是針對Horizon中的終結點而不是Keystone終結點執行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.