[英]What are diffs between iOS App (Xamarin) vs. iOS XAML App (Xamarin.Forms) vs. Cross-Platform
[英]Authentication with Amazon Cognito User Pools in Xamarin.Forms Cross-Platform App
我正在使用 Xamarin.Forms 开发跨平台移动应用程序。 我有一个 Amazon Cognito 用户池,可以通过第三方(Facebook、Google)以及本机应用程序用户身份验证(用户名/密码)进行身份联合,其中包含我的所有用户。 我目前有一个带有单个重定向 URL、 https://localhost:PORT
我已经编写了与 Cognito 接口的 .NET 标准帮助程序库。 我有一个接口ICognitoAuthHelper
,其中包含一个方法AuthenticateUserAsync(PoolRequest request)
。 PoolRequest
object 有一个AuthorizationCode
属性,用于身份验证代码授权流程。 AuthenticateUserAsync
function 实质上将授权代码发布到 Cognito 应用程序客户端 TOKEN 端点以接收 JWT,然后我让实用程序库对其进行解码以检索有关经过身份验证的用户身份的声明。
输入问题:我想利用我编写的这个实用程序库在我的 Xamarin.Forms 应用程序中进行身份验证。
这是一个简单的用例,以及我将如何(和做)在 ASP.NET Core MVC web 应用程序中执行身份验证流程:
1)我点击“使用 Facebook 登录”按钮重定向到 Cognito 应用程序客户端的 AUTHORIZE 端点
2)当应用程序客户端重定向回我的重定向 URL ( localhost
) 时,我从 URL 中获取code
查询参数,将其包装在PoolRequest
中,并将其提供给我的实用程序库。 然后,如上所述,库将向 TOKEN 端点发布授权代码( code
),以开始对返回的 JWT 的解码过程。
3)实用程序库的响应将包含用户声明,我可以重定向到配置文件页面,设置 session 变量等。
如何通过 Xamarin.Forms 应用程序实现这种身份验证流程? 我曾考虑使用WebView
,但不确定如何捕获将从 Cognito 应用程序客户端返回的身份验证代码。 我在应用程序客户端上为 Xamarin 设置什么重定向 URL? 解码令牌集后,如何使WebView
导航到配置文件页面?
非常感谢您对此的任何帮助。
我认为已经解决了这个问题。 我没有 Mac,所以我只能在 Android 上进行测试,但解决方案需要做几件事:
myapp://login
public ICommand FacebookLogin => new Command(FacebookLoginCommand);
public ICommand GoogleLogin => new Command(GoogleLoginCommand);
private async void FacebookLoginCommand()
{
var redirect = "<COGNITO APP CLIENT AUTHORIZE URL (FB)>"; //
await Launcher.OpenAsync(redirect);
}
private async void GoogleLoginCommand()
{
var redirect = "<COGNITO APP CLIENT AUTHORIZE URL (Google)>"; //
await Launcher.OpenAsync(redirect);
}
请注意,这里我在redirect
变量中引用自定义方案重定向 URL,如上所述。
MainActivity
上放置一个IntentFilter
。[IntentFilter(
new [] { Intent.ActionView },
DataScheme = "myapp",
DataHost = "login",
AutoVerify = true,
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable})]
public class MainActivity : global::Xamarin.Forms.Android.FormsAppCompatActivity
{
...
}
重写MainActivity
中的OnNewIntent(Intent intent)
方法,获取授权码查询参数。 它可以用intent.Data?.GetQueryParameter("code")
提取。
使用我的实用程序库来交换令牌/用户身份的代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.