You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Xamarin.Forms客户端接入使用ASP.NET Core Identity的Razor Pages项目

实现方案

一、ASP.NET 5 服务端改造(复用原有Identity体系)

原有Razor Pages的Identity逻辑无需修改,只需新增适配移动端的能力即可:

  • 引入JWT认证NuGet包,安装对应.NET 5版本的Microsoft.AspNetCore.Authentication.JwtBearer包,在认证配置中保留原有Cookie认证供网页端使用,同时新增JWT认证方案作为移动端API的认证方式,JWT的密钥、发行人、受众参数配置在appsettings.json中即可。
  • 新增独立的API控制器(如AccountApiController),复用原有UserManager、SignInManager实现移动端专用接口:
    • 登录接口:接收用户名+密码参数,调用CheckPasswordAsync验证账号有效性,验证通过后生成JWT令牌和用户基础信息返回给客户端
    • 注册接口:接收账号、密码等注册参数,调用CreateAsync创建Identity用户,创建成功后可直接返回JWT或提示注册完成
    • 登出接口:可选实现JWT黑名单逻辑,接收客户端传的当前令牌后加入黑名单,无状态场景下也可仅靠客户端清除本地令牌完成登出
  • 第三方登录服务端配置:
    • 分别在Facebook、Google开发者平台注册应用,拿到对应客户端ID和密钥,在认证服务配置中追加AddFacebook()、AddGoogle()扩展方法,填入对应平台的参数,同时适配网页端和移动端的回调地址
    • 新增第三方登录处理接口,接收移动端传入的第三方授权码,调用对应平台接口换取用户唯一标识和公开信息,匹配现有Identity账号:如果已有绑定的账号直接返回JWT,没有绑定则引导用户绑定自有账号或创建新的Identity账号后返回JWT

二、Xamarin.Forms 客户端实现

  • 自有账号体系登录注册流程:
    • 开发对应登录、注册页面,收集用户输入的账号密码后调用服务端对应API接口,拿到返回的JWT令牌后存储到Xamarin.Essentials.SecureStorage做持久化存储
    • 后续请求服务端需要授权的接口时,在HTTP请求头中添加Authorization: Bearer {你的JWT令牌}即可通过服务端认证
    • 登出逻辑直接清空本地存储的JWT和用户缓存信息即可,按需调用服务端登出接口
  • 第三方登录流程:
    • 调用Xamarin.Essentials.WebAuthenticator API拉起系统浏览器访问第三方授权地址,用户登录授权后会自动回调回你的应用,拿到第三方返回的授权码
    • 将授权码传给服务端的第三方登录接口,拿到JWT后后续逻辑和自有账号登录完全一致
    • 注意在Android、iOS平台的配置文件中添加对应回调URL的Scheme声明,保证授权完成后能正常跳回应用

三、原有功能兼容说明

  • 原有Razor Pages的页面逻辑、CRUD业务、权限控制完全不需要修改,新增的JWT认证和API接口不会影响原有网页端用户的使用
  • 原有需要授权的业务逻辑如果需要给移动端开放,要么给原有PageHandler追加[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]注解,要么封装独立的API接口复用原有EF业务代码即可,不需要重写业务逻辑

内容的提问来源于stack exchange,提问作者Denis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:51:01