DEV Community

loading...

Android OAuth2 Basic Implementation

mesadhan profile image Sadhan Sarker ・2 min read

Implementations Task Checklist:-

  • [ ] Create an Android Application.
  • [ ] Install library.
  • [ ] Need some basic configuration.
  • [ ] Coding Implementation.
  • [ ] Run and test application

Prerequisites:-

  • [ ] Need to Install Android Studio with SDK
  • [ ] Need basic knowledge about Java

Implementations:-

  • [X] Create an Android Application.
  • [X] Install library: OkHttp

in anroid build.gradle add okhttp library

android {
    //... 

    compileOptions {
        targetCompatibility = "8"
        sourceCompatibility = "8"
    }
}

dependencies {
    //...

    implementation 'com.squareup.okhttp3:okhttp:3.14.1'
}
  • [X] Need some basic configuration.

open AndroidManifest.xml file


<manifest>
  //...
  <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:usesCleartextTraffic="true">

        /...
    </application>
</manifest>

Notes: to make it simplified use android:usesCleartextTraffic="true" for advance customization use android:networkSecurityConfig="@xml/network_security_config" file

create file in res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">127.0.0.1</domain>
    </domain-config>
</network-security-config>
  • [X] Coding Implementation:

  • create BasicAuthInterceptor.java


import java.io.IOException;
import okhttp3.Credentials;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

public class BasicAuthInterceptor implements Interceptor {
    private String credentials;
    public BasicAuthInterceptor(String user, String password) {
        this.credentials = Credentials.basic(user, password);
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        Request authenticatedRequest = request.newBuilder()
                .header("Authorization", credentials).build();
        return chain.proceed(authenticatedRequest);
    }
}

  • then add code block into MainActivity.java

import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    public OkHttpClient client;
    public static final MediaType CONTENT_TYPE = MediaType.get("application/x-www-form-urlencoded");
    String apUrl = "www.example.com/oauth/token";       // replace host url through your oauth2 server.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        client = new OkHttpClient.Builder()
                .addInterceptor(new BasicAuthInterceptor("USER_CLIENT_APP", "password"))
                .build();

        String username = "user";
        String password = "password";
        String grant_type = "password";
        String requestData = "grant_type=" + grant_type + "&username=" + username + "&password=" + password;

        try {
            loginRequest(apUrl, requestData);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void loginRequest(String apUrl, String requestData) throws IOException {

        RequestBody body = RequestBody.create(CONTENT_TYPE, requestData);
        Request request = new Request.Builder()
                .url(apUrl)
                .addHeader("Content-Type", " application/x-www-form-urlencoded")
                .post(body)
                .build();

        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("CallBackResponse", "onFailure() Request was: " + call.request());
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.i("CallBackResponse ", "onResponse(): " + response.body().string());
            }

        });
    }
}


  • [X] Finally Run and test your application and check response in 'Logcat'.

Run and test Application From Source

Thanks For Reading

Discussion

pic
Editor guide