Реагировать на собственный OAuth2 redirect_uri: неверная схема

Недавно я узнал о реакции на нативную и столкнулся с такой нерешаемой проблемой. Я пытаюсь аутентифицироваться с помощью gmail OAuth2 из моего приложения, в качестве параметра перенаправления я поставил myscheme: // oauth, весь URL выглядит так:

https://accounts.google.com/o/oauth2/v2/auth?response_type=token&client_id=XXXXXXXX&redirect_uri=myscheme://oauth&scope=https://www.googleapis.com/auth/spreadsheets

Я зарегистрировал intent-фильтр в моем manifest.xml, который выглядит так:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="myscheme" android:host="oauth"/>
        </intent-filter>
      </activity>

Я использую собственную ссылку "Реакция" для открытия URL-адреса, и я получаю сообщение об ошибке (в браузере): 400 Неверное значение параметра для redirect_uri: Неверная схема: myscheme: // oauth

Кто-нибудь может мне помочь, что мне здесь не хватает?

1 ответ

Решение

Из документов я вижу две проблемы с вашим URL:

  1. Пользовательская схема должна содержать период, чтобы быть действительным

+ Изменить myscheme что-то вроде com.myapp,

  1. Обратите внимание на один "/" после пользовательской схемы URI, который отличается от обычных HTTP-URL

+ Изменить myscheme://oauth... в myscheme:/oauth...

После этих исправлений ваш URL должен выглядеть следующим образом com.myapp.myscheme:/oauth... вместо myscheme://oauth...

Я использую библиотеку AppAuth для получения токенов OAuth2. Согласно официальному документу Google, этот формат мне подходит.

<your.app.application.id>:/oauth2callback

Например, если идентификатор вашего приложения com.example.app, то в вашем AndroidManifest.xml

<activity android:name="net.openid.appauth.RedirectUriReceiverActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="com.example.app" />
        </intent-filter>
</activity>

И redirectUrl, предоставляемый AppAuth, будет выглядеть так

private val redirectUrl = "com.example.app:/oauth2callback"

Надеюсь, это кому-то поможет.

Другие вопросы по тегам