Azure移动服务身份验证 - 使用sql表更改令牌存储存储?

时间:2018-05-28 11:23:08

标签: xamarin azure-mobile-services

根据this chapter here的文件,据说

  

Azure App Service身份验证/授权维护令牌   存储在XDrive中(这是所有人共享的驱动器)   同一应用服务计划中后端的实例)。令牌   store位于后端的D:\ home \ data \ .auth \ tokens。该   令牌被加密并存储在每个用户的加密文件中。

我猜XDrive是blob存储。我有自己的asp.net会员用户表,它已经使用MVC和web api为google,facebook,amazon等实现了外部登录。 我想知道我是否可以更改令牌存储并使用这些表在我的网络和移动应用程序之间保持完整性,而不是使用2个单独的解决方案。

我已经使用web api为我现有的登录实现了用户名/密码登录,它运行正常。所以,如果我也可以使用azure移动服务而不是Azure活动目录。

enter image description here

1 个答案:

答案 0 :(得分:0)

  

我想知道我是否可以更改令牌存储并使用这些表在我的网络和移动应用之间保持完整性,而不是使用2个单独的解决方案。

我假设您要使用Custom Authentication。如果是这种情况,您可以实现自定义端点以接受用户参数并检查数据库的用户名和密码。以下是article

的代码段
[Route(".auth/login/custom")]
    public class CustomAuthController : ApiController
    {
        private MobileServiceContext db;
        private string signingKey, audience, issuer;

        public CustomAuthController()
        {
            db = new MobileServiceContext();
            signingKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY");
            var website = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME");
            audience = $"https://{website}/";
            issuer = $"https://{website}/";
        }

        [HttpPost]
        public IHttpActionResult Post([FromBody] User body)
        {
            if (body == null || body.Username == null || body.Password == null ||
                body.Username.Length == 0 || body.Password.Length == 0)
            {
                return BadRequest(); ;
            }

            if (!IsValidUser(body))   //add your logic to verify the use
            {  

                return Unauthorized();
            }

            var claims = new Claim[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, body.Username)
            };

            JwtSecurityToken token = AppServiceLoginHandler.CreateToken(
                claims, signingKey, audience, issuer, TimeSpan.FromDays(30));
            return Ok(new LoginResult()
            {
                AuthenticationToken = token.RawData,
                User = new LoginResultUser { UserId = body.Username }
            });
        }