我正在尝试实现基于Oauth2的Web服务.我有clIEntID,clIEntSecret,Authorization终结点,令牌终结点和回调Url(自定义架构指向android本机页面).当我检查其他基于Oauth2的API时,它具有登录URL,它将被重定向到登录网页.但在我的情况下,没有登录URL,但应将其重定向到本机登录页面,并且在成功响应后,应将其重定向到登录本机页面.如何使用Oauth2获取访问令牌?
任何帮助将不胜感激.
解决方法:
从上面的评论中,假设您已经拥有ASP.NET WebAPI作为服务器端应用程序,并且如果您的Android客户端应用程序使用httpUrlConnection,则可以参考以下示例代码(当然,您需要进行更多修改以使它按您的要求工作):
String address = "http://<IP>:<PORT>/token"; httpURLConnection urlConnection; String requestbody; Uri.Builder builder = new Uri.Builder(); Map<String, String> stringMap = new HashMap<>(); stringMap.put("grant_type", "password"); stringMap.put("username", "bnk"); stringMap.put("password", "bnk"); Iterator entrIEs = stringMap.entrySet().iterator(); while (entrIEs.hasNext()) { Map.Entry entry = (Map.Entry) entrIEs.next(); builder.appendqueryParameter(entry.getKey().toString(), entry.getValue().toString()); entrIEs.remove(); } requestbody = builder.build().getEncodedquery(); try { URL url = new URL(address); urlConnection = (httpURLConnection) url.openConnection(); urlConnection.setDoinput(true); urlConnection.setDoOutput(true); urlConnection.setRequestMethod("POST"); urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); OutputStream outputStream = new bufferedoutputstream(urlConnection.getoutputStream()); BuffereDWriter writer = new BuffereDWriter(new OutputStreamWriter(outputStream, "utf-8")); writer.write(requestbody); writer.flush(); writer.close(); outputStream.close(); urlConnection.connect(); if (urlConnection.getResponseCode() == httpURLConnection.http_OK) { // do something... } else { // do something... } // do something... } catch (Exception e) { e.printstacktrace(); }
更新:
如果您喜欢OkHttp,请参考以下工作代码:
private class AccesstokenRequest extends AsyncTask<VoID, VoID, String> { @OverrIDe protected String doInBackground(VoID... voIDs) { String accesstoken = null; OkhttpJsonRequest JsonRequest = new OkhttpJsonRequest(); Requestbody requestbody = new FormEnCodingBuilder() .add("grant_type", "password") .add("username", "bnk") .add("password", "bnk123") .build(); try { JsONObject JsonObject = JsonRequest.post("http://192.168.1.100:24780/token", requestbody); if (!JsonObject.isNull("access_token")) { accesstoken = JsonObject.getString("access_token"); } } catch (IOException | JsONException e) { e.printstacktrace(); } return accesstoken; } @OverrIDe protected voID onPostExecute(String response) { super.onPostExecute(response); // do something such as storing the token for furture requests } } public class OkhttpJsonRequest { OkhttpClIEnt clIEnt = new OkhttpClIEnt(); JsONObject post(String url, Requestbody body) throws IOException, JsONException { Request request = new Request.Builder() .url(url) .post(body) .build(); Response response = clIEnt.newCall(request).execute(); return new JsONObject(response.body().string()); } }
希望这可以帮助!
总结以上是内存溢出为你收集整理的android-使用来自本机登录页面的登录凭据实现Oauth2全部内容,希望文章能够帮你解决android-使用来自本机登录页面的登录凭据实现Oauth2所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)