我正在构建一个移动应用程序和一个 ServiceStack Web 服务后端。ServiceStack 中的 Authentication 东西看起来很棒,但很容易迷失在它的灵活性中——非常感谢指导。我将使用我自己的数据库表在 Web 服务中存储用户等。我想要一个注册过程和随后的身份验证,如下所示:
- 用户最初只提供一个电子邮件地址,然后我的网络服务通过电子邮件将注册密钥发送给用户
- 用户输入密钥。应用程序发送到网络服务进行注册:电子邮件、密钥和唯一的设备标识符。
- Web 服务验证密钥并存储电子邮件和设备 ID。它使用应用程序将用于以后的身份验证的身份验证令牌进行响应。
然后后续的 Web 服务请求将提供设备 ID 和身份验证令牌(或使用它创建的哈希)。该应用程序不是很健谈,因此我很想在每个 Web 请求上发送身份验证详细信息。
问题 1:我应该挂钩到 ServiceStack 的注册 API 还是只添加几个自定义 Web 服务调用?例如,如果不使用 ServiceStack 的注册,我会:
- 使用电子邮件地址和设备 ID 发布到注册 Web 服务。我的 Web 服务将发送带有密钥的注册电子邮件并将记录添加到用户 db 表中。
- 当用户输入密钥时,它会再次发布到注册 Web 服务,这次也是使用密钥。我的 Web 服务将验证密钥并更新将用户标记为已注册的用户表,创建并记录身份验证令牌并将其返回给调用者
- 随后的请求将使用 http 基本身份验证发送,设备 ID 作为用户名,身份验证令牌作为密码。该服务不是很健谈,因此每个请求都会发送凭据。
- 我将实现一个 CredentialsAuthProvider,它将使用 httpRequest.GetBasicAuthUserAndPassword() 获取凭据,并根据 db 数据验证它们。
但感觉我应该使用内置到 ServiceStack 的注册。
问题 2:在每个请求中传递身份验证详细信息有什么问题?这将使编写我的应用程序请求更容易,但根据 ServiceStack 示例,它似乎没有“完成”。大概这是因为如果您有很多请求需要重新验证每个呼叫,那么效率会很低——还有其他原因吗?我的应用最多每隔几分钟只会发出一个 Web 请求,因此避免会话并重新验证每个请求似乎更简单。
问题 3:我是否在继承 CredentialsAuthProvider 的正确轨道上?
问题 4:使用 auth 令牌生成哈希而不是每次发送 auth 令牌有什么意义吗?所有通信都将通过 https。