Azure移动服务身份验证:能否改用SQL表存储令牌?
嗨,针对你提出的两个Azure认证相关的问题,我整理了详细的解答和可行方案,希望能帮到你:
一、能不能把令牌存储改到自建的ASP.NET用户表里?
首先得明确:Azure App Service自带的简易认证模块(俗称Easy Auth)默认不支持直接把令牌存储切换到你的自定义SQL用户表,不过有两种靠谱的方式能实现你想要的「Web和移动用户体系统一」的目标:
完全接管认证逻辑,绕过Easy Auth
既然你已经自己搞定了MVC和Web API的外部登录(Google/Facebook这些),还有用户名密码登录功能,其实可以完全自己掌控认证流程:- 用你现有的ASP.NET成员资格系统(或者ASP.NET Identity)来管理用户和会话
- 用户登录成功后,生成你自己的JWT令牌返回给客户端(不管是Web还是移动App)
- 在Web API里加个JWT验证的中间件,每次请求都校验令牌有效性
这种方式下,你想把令牌存在哪里都行——比如直接关联到你的用户表,完美实现Web和移动用户体系的统一,完全不用两套方案。
给Easy Auth加自定义令牌存储扩展(适合不想放弃Easy Auth的场景)
如果你不想完全丢掉Easy Auth的现有功能,可以用Azure App Service的令牌存储扩展性功能,自己写代码接管令牌的存储逻辑:- 你需要实现
ITokenStoreProvider这个接口,写好把令牌存到你的SQL用户表的代码 - 然后通过App Service的扩展机制注册这个自定义的存储提供器
不过这个方案有点复杂,需要对Azure App Service的认证扩展机制比较熟悉,官方文档也没太详细的指引,适合有一定Azure底层开发经验的同学。
- 你需要实现
另外补充个小知识点:你猜的XDrive其实不是Blob存储哦,它是App Service计划里的共享本地存储(本质是挂载的Azure Files共享驱动器),和Blob存储是不同的服务~
二、能用Azure移动服务替代Azure AD处理用户名/密码登录吗?
当然可以!不过得先理清几个关键点,再决定要不要这么做:
Azure移动服务的定位
现在Azure移动服务已经和App Service整合了(叫App Service Mobile Apps),它本身就有一套认证系统,既支持自定义用户名密码登录,也支持第三方登录。而且它能和你的自建用户表集成:你可以写个自定义的登录接口,校验用户输入的用户名密码是否匹配你的用户表,然后返回移动服务的认证令牌就行。要不要用它?看你的现有系统
如果你已经有个运行正常的Web API用户名/密码登录,其实更简单的做法是让移动App直接调用这个现有API,返回统一的JWT令牌——这样不用额外引入移动服务,能最大程度保持现有系统的一致性,反而更省心。
要是你想利用移动服务自带的一些客户端SDK简化移动App的开发(比如自动处理令牌刷新、离线同步这些),那集成移动服务是个不错的选择。
附上你提供的Azure认证配置界面截图:
内容的提问来源于stack exchange,提问作者Emil

