Как реализовать намерение в Android для библиотеки AppAuth? - PullRequest
0 голосов
/ 12 декабря 2018

Я реализую библиотеку Xamarin AppAuth с IdentityServer4.Я не могу добиться перенаправления после авторизации в пользовательской вкладке обратно в приложение.Запрос авторизации показан ниже:

AuthorizationRequest.Builder authReqBuilder = 
new AuthorizationRequest.Builder(authConfig,
                                 "clientId",
                                 ResponseTypeValues.Code,
                                 Uri.Parse("https://com.example/oauth2redirect"));
authReqBuilder.SetScope("api1 openid profile offline_access");

Вот конфигурация в AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          xmlns:tools="http://schemas.android.com/tools">
    <application ...>
        <activity
                android:name="net.openid.appauth.RedirectUriReceiverActivity"
                tools:node="replace">
            <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="https"
                      android:host="example.com"
                      android:path="/oauth2redirect" />
            </intent-filter>
        </activity>
    </application>
</manifest>

После того, как я обработаю запрос и войду в систему, URL-адрес перенаправления применяется на пользовательской вкладке иэкран остается без перенаправления обратно в нативное приложение.

Не могли бы вы дать мне несколько подсказок, чтобы заставить перенаправление обратно в нативное приложение работать?

Заранее спасибо.

Обновление

GitHub репозиторий: https://github.com/OldrichTodt/AppAuthExample/blob/master/README.md

Код входа вызывается из приложения Xamarin вMainPage.xaml.cs Вот полный код:

public async Task LoginAsync()
{
    try
    {
        var authConfig = await AuthorizationServiceConfiguration.FetchFromIssuerAsync(Uri.Parse("https://example.com"));

        AuthState authState = new AuthState(authConfig);

        AuthorizationRequest.Builder authReqBuilder = new AuthorizationRequest.Builder(authConfig,
                                                                                       "RealOneGame.Xamarin",
                                                                                       ResponseTypeValues.Code,
                                                                                       Uri.Parse("https://com.example/oauth2redirect"));
        authReqBuilder.SetScope("api1 openid profile offline_access");

        AuthorizationRequest authReq = authReqBuilder.Build();

        AuthorizationService authService = new AuthorizationService(Application.Context);

        authService.PerformAuthorizationRequest(authReq, PendingIntent.GetActivity(Application.Context, 0, new Intent(Application.Context, typeof(MyAuthCompleteActivity)), 0),
                                                         PendingIntent.GetActivity(Application.Context, 0, new Intent(Application.Context, typeof(MyAuthCanceledActivity)), 0));
    }
    catch (Exception ex)
    {
    }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Не могли бы вы дать мне несколько подсказок, чтобы сделать перенаправление назад на нативное приложение работающим?

Пользовательская вкладка открыта в вашем приложении, а не запускать новое приложение.Поэтому заданная вами глубокая ссылка не будет работать.Вы можете установить событие onclick в кнопке или ссылке на странице авторизации, чтобы закрыть вкладку.Например:

<a href="#" onclick="window.close();">Click me to close</a>

Или вы можете обратиться к следующему ответу, чтобы закрыть пользовательскую вкладку: Как закрыть пользовательские вкладки Chrome

...