ASP.Net Core 6 Web API对接Xamarin应用的记住我与忘记密码实现咨询
项目背景
我正在开发适配Xamarin应用的车辆追踪WebAPI,该WebAPI基于.NET 6构建,将由Xamarin移动应用调用。此前我没有相关功能的开发经验,因此在正式启动开发前希望核实相关实现方案。
Xamarin应用UI如下:
核心疑问
我目前有两个需要确认的核心实现点:
- 如何在ASP.Net Core 6 Web API侧实现可适配Xamarin应用的*Remember me(记住我)*功能?
- 如何在Web API侧实现可适配Xamarin应用的*Forgot password(忘记密码)*功能?
现有参考代码
[HttpDelete("{id}")] [ServiceFilter(typeof(ValidateEmployeeForCompanyExistsAttribute))] public async Task<IActionResult> DeleteEmployeeForCompany(Guid companyId, Guid id) { var employeeForCompany = HttpContext.Items["employee"] as Employee; _repository.Employee.DeleteEmployee(employeeForCompany); await _repository.SaveAsync(); return NoContent(); }
实现方案解答
1. Remember me(记住我)功能实现思路
WebAPI本身是无状态的,记住我功能核心是长期有效身份凭证的下发和校验,适配Xamarin端不需要依赖Cookie,直接用Token方案即可落地:
- 首先给登录接口新增
rememberMe布尔类型入参,用户勾选记住我选项后,Xamarin端调用登录接口时传true - 服务端基于JWT实现身份认证,普通登录场景下Token有效期设为2小时即可,勾选记住我的场景下Token有效期可设置为7~30天,同时可以配套生成一个有效期更长的Refresh Token,存储在对应用户的表字段中
- Xamarin端拿到Token和Refresh Token后,存储在移动端安全存储区域(可直接用Xamarin.Essentials提供的SecureStorage类),应用下次冷启动时优先读取本地存储的Token,如果还在有效期可以直接跳过登录进入主界面,Token过期就用存储的Refresh Token调用刷新接口换取新的有效Token,无需用户重新输入账号密码
- 服务端侧需要做好Token过期校验、Refresh Token合法性校验,用户主动登出时将对应Refresh Token置为失效,避免凭证被盗用。
2. Forgot password(忘记密码)功能实现思路
该功能核心是账号身份核验+密码重置,不需要依赖浏览器跳转,完全可以在原生交互流程内完成适配:
- 第一步开发验证码发送接口,入参为用户绑定的手机号/邮箱,服务端先校验对应账号是否存在,校验通过后生成6位数字验证码,有效期设置为5~10分钟,存储在Redis或者对应用户表字段中,再调用短信/邮件推送服务把验证码发给用户
- 第二步开发密码重置接口,入参为账号、验证码、新密码,服务端先校验验证码是否正确、是否在有效期内,所有校验通过后将用户表中的密码哈希更新为新密码的哈希值,返回重置成功即可
- Xamarin端对应做两个交互页面,第一个页面对应用户输入账号触发验证码发送,第二个页面对应用户输入验证码和新密码提交重置,整个流程无需跳转Web页面,完全在移动端内完成。
内容的提问来源于stack exchange,提问作者User456
相关产品推荐
相关产品推荐

