我有一個任務,我需要使用電子郵件和密碼來認證用戶並獲取訪問令牌。我有api密鑰,祕密和基本URL。我不需要爲該作業使用重定向網址,因此未提供該網址。我不確定使用哪種方法或哪個庫。我沉浸在豐富的信息中,令我感到困惑。我需要指出正確的方向......任何形式的幫助都會受到歡迎。謝謝Android應用程序的RESTful Api認證
回答
根據您的意見,說明會告訴您使用Resource Owner Password Credentials Grant。您可以在規範中看到example request。
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=johndoe&password=A3ddj3w
唯一可能看起來很奇怪(如果你從未遇到過)的是Authorization
標頭值。請閱讀Basic Authentication。基本上czZCaGRSa3F0MzpnWDFmQmF0M2JW
是username:password
(實際上<client_id>:<client_secret>
)的base64編碼。
不使用任何外部庫(只是標準的Java庫)發出請求,則可能有類似
String formData = "username=<uname>&password=<pass>&grant_type=password";
String header = "Basic " + Base64.encodeAsString("<client_id>:<client_secret>");
HttpURLConnection connection
= (HttpURLConnection) new URL(tokenUrl).openConnection();
connection.setDoOutput(true);
connection.addRequestProperty("Authorization", header);
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestMethod("POST");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", Integer.toString(formData.length()));
OutputStream out = connection.getOutputStream();
out.write(formData.getBytes(StandardCharsets.UTF_8));
InputStream in = connection.getInputStream();
AccessToken token = new ObjectMapper().readValue(in, AccessToken.class);
System.out.println(token);
out.close();
in.close();
我使用的Base64
不是一個標準庫類。 ObjectMapper
也不是標準的庫類。我只是用它來解析對AccessToken
類的標記響應。你可以使用任何你喜歡的解析器。該AccessToken
類只是有所有可能的標記值
public class AccessToken {
public String access_token;
public String refresh_token;
public long expires_in;
public String token_type;
public String scope;
}
從那裏,一旦你的道理,任何資源請求你想,你只需要與Bearer <access_token>
添加Authorization
頭。
這非常有幫助!我想知道你使用BASE64的庫是什麼? –
這是我使用的後端框架中的一個類。它與我做的測試沒有任何關係,但是我只是使用了這個項目,所以我不必爲這個簡單的測試創建另一個項目。這個班對您來說可能沒用。雖然看起來Android也有[Base64類](http://developer.android.com/reference/android/util/Base64.html)。哦,最後一段,我認爲它不符合你的要求。看起來認證方案應該是「OAuth2」而不是「承載者」 –
我建議你使用retrofit庫來做到這一點。
假設您的網址爲http://baseurl.com/api,您必須執行GET請求以/登錄傳遞電子郵件和密碼。我假設你的API會以JSON的形式返回一個User對象。
Api.java
public interface Api {
@GET("/login")
public void login(@Query("email") String email, @Query("password"), Callback<User> callback);
}
,你需要執行API調用:
Retrofit retrofit = new Retrofit.Builder()
.setEndpoint("http://baseurl.com")
.build();
Api api = retrofit.create(Api.class);
api.login(email, password, new Callback<User>() {
@Override
public void success(User user, Response response) {
// login logic
}
@Override
public void failure(RetrofitError error) {
Log.e("Retrofit", error.getMessage());
}
});
我希望這個例子可以幫助你。不要忘記閱讀retrofit documentation
我試過這是行不通的。改造簡單太簡單了,但是它不適用於我。 –
爲了本練習的目的,請使用此處列出的電子郵件/密碼流來獲取訪問令牌xxxxxxxxxxxxxx。請注意,本練習不需要redirect_uri URL參數,只有用戶名,密碼,client_id和client_secret。您不必關心令牌過期或爲此任務負責刷新,您只對響應的access_token部分感興趣。一旦您爲用戶獲取訪問令牌,任何後續API調用都可以通過將授權HTTP標頭設置爲OAuth2
- 1. RESTful API認證流程
- 2. android應用程序認證
- 3. Django Restful API應用程序
- 4. RestSharp Oauth2認證Cherwell restful api
- 5. PHP RESTful API接受認證
- 6. RESTful認證API設計
- 7. Azure API應用程序認證
- 8. Android應用程序的認證ID
- 9. RESTful應用程序的Java API設計
- 10. SpringMVC應用程序的RESTful API
- 11. Laravel針對移動應用程序的RESTful API身份驗證
- 12. 瞭解Android應用程序認證
- 13. Phonegap-Android登錄認證應用程序
- 14. Android應用程序和Apache認證
- 15. 用戶令牌認證Spring MVC RESTful API
- 16. 使用Android應用程序的Laravel RESTful API
- 17. node.js RESTful API與amazon之類的認證
- 18. Facebook應用程序認證
- 19. facebook應用程序認證
- 20. Lumen應用程序認證
- 21. 使用ACS的RESTful認證
- 22. Spring引導Restful API:簡單認證
- 23. 設計一個RESTful認證API
- 24. Android應用程序的API
- 25. 如何使用Authlogic實現Rails應用程序的API認證
- 26. RESTful用戶認證服務
- 27. 用於後臺應用程序的Facebook應用程序認證
- 28. REST API認證
- 29. PHP RESTful的API - 如何驗證在客戶端應用程序和用戶
- 30. RESTful交叉認證
您是否需要使用Oauth 1.0或2.0?你的問題很難說清楚。 1.0使用「消費者密鑰」和「消費者機密」(所以我想可能是1.0),但它需要重定向(可能不是)。 2.0不需要重定向(好),但使用「客戶端ID」和「客戶端密鑰」(不符合要求)。請澄清,以獲得進一步的幫助。 –
它是oauth 2.0。 –
查看OAuth 2.0規範中的[資源所有者密碼憑據授予](http://tools.ietf.org/html/rfc6749#section-4.3)。我相信這是指令要求的。它顯示了一個示例令牌請求,其中客戶端ID(api key ...也許)和客戶端密鑰以base64編碼到授權標頭中。您可能想要與您的教師或任何給予您的任務分清楚。另請參閱[基本身份驗證](https://en.wikipedia。org/wiki/Basic_access_authentication)關於如何正確制定授權標題 –