5

我正在使用新的 webapi。

现在我不知道我是否正确执行此操作,但我正在尝试设置我的 api 以在 HttpResponseMessages 标头中返回身份验证 cookie,以便在另一个 mvc 应用程序上使用。

我正在使用 FormsAuthenticationTicket,因为我认为它是我需要使用的

  public HttpResponseMessage Get(LoginModel model)
    {
        if (model.UserName == "bob")
        {
            //  if (Membership.ValidateUser(model.UserName, model.Password))
            // {
            var msg = new HttpResponseMessage(HttpStatusCode.OK);
            var expires = DateTime.Now.AddMinutes(30);
            var auth = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now, expires,
                                                     model.RememberMe,"password",
                                                     FormsAuthentication.FormsCookiePath);
            var cookie = new HttpCookie("user");
            cookie.Value = FormsAuthentication.Encrypt(auth);
            cookie.Domain = "localhost";
            cookie.Expires = expires;
            msg.Headers.Add("result",cookie.Value);
            return msg;
            //   }
        }
        return new HttpResponseMessage(HttpStatusCode.Forbidden);
        //else
        //{
        //    return "The user name or password provided is incorrect.";
        //}
    }

现在在我的 mvc 应用程序的登录控制器中,我调用服务并从我在 api 控制器中设置的标头获取数据值。

   string data = response.Headers["result"].ToString();
   FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(data);

每次我尝试运行 FormsAuthentication.Decrypt 时,我都会收到错误消息

无法验证数据。

我认为这是由于 api 加密数据时使用了网站不知道的某种密钥。我对吗?

有人可以帮忙吗?

谢谢

4

1 回答 1

9

我认为这是由于 api 加密数据时使用了网站不知道的某种密钥。我对吗?

FormsAuthentication.Encrypt 和 Decrypt 方法使用机器密钥。因此,请确保您为 Web API Web 应用程序和消费 ASP.NET MVC 应用程序配置了相同的密钥。

您还可以查看以下文章,该文章说明了如何将 OAuth 2.0 与 Web API 结合使用。

于 2012-04-12T05:56:52.460 回答