xamarin - 如何在 Android 中为 AppAuth 库实现意图?
问题描述
我正在使用 IdentityServer4 实现 Xamarin AppAuth 库。在自定义选项卡中授权后,我无法实现重定向回应用程序。授权请求如下图:
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
登录代码是从 MainPage.xaml.cs 中的 Xamarin 应用程序调用的完整代码:
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)
{
}
}
解决方案
您能否给我一些线索以使重定向回本机应用程序正常工作?
自定义选项卡在您的应用中打开,而不是启动新应用。所以你设置的深层链接将不起作用。您可以onclick
在授权页面的按钮或链接中设置事件以关闭选项卡。例如:
<a href="#" onclick="window.close();">Click me to close</a>
或者您可以参考以下答案来关闭自定义选项卡: 如何关闭 chrome 自定义选项卡
推荐阅读
- java - Java 正则表达式拆分单词、标点符号、空格、换行但保持收缩?
- php - 计算两个日期之间的天数(周一至周三) - Woocommerce 预订?
- sed - sed - 使用两个字符串寻址
- java - (Java) 如何解析具有多种可能格式的坐标字符串,并将它们转换为整数?
- ios - Cloud Functions 和 DeviceCheck,没有得到 Apple 的响应
- r - R - 文本分析 - 误导性结果
- c# - 为什么 EF Core 中的 DbContext 在事务回滚后返回更改的实体
- javascript - 如何使引导程序无响应?
- php - 调用存储在类变量中的匿名函数
- javascript - 'Readonly<{ children?: ReactNode; 类型上不存在属性 'XYZ' }> & 只读<{}>'