Глубокая ссылка для получения кода авторизации - PullRequest
0 голосов
/ 25 июня 2018

Я очень застрял в проблеме, на которую потратил много времени и много разных проб и ошибок.

Мое приложение использует OAuth 2.0 для отправки изображения поставщику.(Kiteworks), который является безопасным хранилищем.У Kiteworks есть собственный API, позволяющий это делать.

Мое приложение запускает страницу входа, пользователь входит в систему и перенаправляется на URL-адрес обратного вызова, в котором есть код авторизации.

Сейчас я пытаюсь добиться того, чтобы, когда эта страница была нажата, она снова перенаправлялась в мое приложение, но самое главное, что для этого требуется код авторизации, чтобы я мог использовать его для обмена токена и отправки изображения.

Вот код, который я попробовал, который позволяет мне открывать URL-адрес перенаправления с моим приложением (дает мне выбор приложения или хрома).То, на что я надеялся, что когда я выбрал приложение, оно сохраняло бы код авторизации, но это не так:

Манифест:

 <activity
        android:name=".Kiteworks_SignIn"
        android:launchMode="singleTop"
        android:noHistory="true"
        android:screenOrientation="behind"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.LAUNCHER" />
            <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
            <data android:scheme="https"
                android:host="sync.almacgroup.com"
                android:pathPrefix="/rest/callback">
                <!--https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1-->
            </data>
                          />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>

Активность входа в Kiteworks:

browser = findViewById(R.id.buttonBrowser);

    browser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            browserIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivityForResult(browserIntent, authcode);

            if (browserIntent != null && browserIntent.getData() != null && "https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1".equals(browserIntent.getData().getScheme())) {
                authcode  = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
                // complete oauth flow
                setResult(Activity.RESULT_OK);
                finish();
            } else {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1"))
                        .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND);
                startActivityForResult(browserIntent, authcode);
                setResult(Activity.RESULT_OK);
                finish();
            }
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    try {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE  && resultCode  == RESULT_OK) {
            authcode  = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
            Toast.makeText(this, authcode, Toast.LENGTH_SHORT).show();
        }
    } catch (Exception ex) {
        Toast.makeText(Kiteworks_SignIn.this, ex.toString(),
                Toast.LENGTH_LONG).show();
    }
}

Кто-нибудь знает, где я ошибаюсь или какой-либо другой способ добиться этого?

Буду признателен за любую помощь :)

1 Ответ

0 голосов
/ 25 июня 2018

Ваш параметр запроса redirect_uri, а не код.Вам необходимо проанализировать параметр с именем code после анализа redirect_uri.

.
...