Я реализую библиотеку 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)
{
}
}