private void login() {
androidID = Secure.getString(MainActivity.this.getContentResolver(), Secure.ANDROID_ID);
String uP = androidID.concat(":ClientTrustedSecret");
byte[] authByteAry = null;
try {
authByteAry = uP.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String base64 = Base64.encodeToString(authByteAry, Base64.DEFAULT).trim();
client.addHeader("Authorization", "Basic ".concat(base64));
// Following format is required to post to OAuth
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("grant_type", "password");
jsonObject.put("username", "abc");
jsonObject.put("password", "abc");
} catch (JSONException e1) {
e1.printStackTrace();
}
String contentType = "application/json; charset=UTF-8";
StringEntity data = null;
try {
// Send the json to the server
data = new StringEntity(jsonObject.toString());
client.post(MainActivity.this, baseURL.concat("/tokens"), data, contentType, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
oauthAccessTokenString = jsonObject.get("access_token").toString();
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t, String err) {
System.out.println("login failed");
}
});
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
위의 내용은 로그인하는 방법입니다. 그리고 다른 웹 서비스 호출을 할 때 나는 승인받지 못하게됩니다. 잠금 해제 방법에는 다음 헤더가 필요합니다. 코드 위Android Https OAuth 401 인증되지 않은 오류
private void unlock()
{
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
asyncHttpClient.addHeader("Locale", "en_US");
asyncHttpClient.addHeader("X-Originator-Type", "app");
asyncHttpClient.addHeader("Content-Type", "application/json");
// asyncHttpClient.addHeader("Connection", "Keep-Alive");
// asyncHttpClient.addHeader("X-Device-Id", androidID);
// asyncHttpClient.addHeader("X-via", deviceId);
// asyncHttpClient.addHeader("ClientID", "[email protected]");
asyncHttpClient.addHeader("Authorization", "Bearer ".concat(oauthAccessTokenString));
asyncHttpClient.get("host/[email protected]", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
@Override
public void onFailure(Throwable t, String err) {
System.out.println("Unlock server call failed");
Log.d("printing error: ", err);
}
});
}
401 승인되지 않은 예외가 발생합니다. 내가 가지고있는 문서에서 아무런 언급도하지 않고, 다시 url을 호출한다. oauth 액세스 토큰을 제공하고 있는데, 그렇다면 왜 여전히 401을 얻는 것입니까? 비밀이 두 번째 전화와 관련이 있습니까? 나는 내가 그런 식으로 내 머리글을 설정할 필요가 있다는 말을 들었다. 나는 또한 "https의 경우 클라이언트가 인증서의 유효성 검사를 처리 할 수 있어야합니다. 누구든지 해결 방법을 알고 있습니까?
내 X-Device-Id가 잘못되었을 수 있습니다. 로그인 방법에 문제가 있습니다. 잘못 했습니까? –