Asp.net 从cookie社交登录移动到令牌社交登录

Asp.net 从cookie社交登录移动到令牌社交登录,asp.net,owin,Asp.net,Owin,这是我在StackExchange上发布的一篇后续文章,我没有得到答案。也许它放得不合适,应该在这里。但不管怎样,我又打了一些,又砍又改,现在我离得更近了,但需要更多的帮助 我正在尝试使用Owin和各种Katana库实现Facebook登录(以及后来的其他登录)。我只做登录,没有注册,没有ASP.NET数据库。我不是在使用ASP.NET身份信息(就像在个人帐户中使用默认的ASP.NET项目一样),这是90%的教程告诉您要做的。对不起,如果我听起来很沮丧。我设法找到了其他人,他们在没有身份gubb

这是我在StackExchange上发布的一篇后续文章,我没有得到答案。也许它放得不合适,应该在这里。但不管怎样,我又打了一些,又砍又改,现在我离得更近了,但需要更多的帮助

我正在尝试使用Owin和各种Katana库实现Facebook登录(以及后来的其他登录)。我只做登录,没有注册,没有ASP.NET数据库。我不是在使用ASP.NET身份信息(就像在个人帐户中使用默认的ASP.NET项目一样),这是90%的教程告诉您要做的。对不起,如果我听起来很沮丧。我设法找到了其他人,他们在没有身份gubbins的情况下打破了模式并实现了OWIN,我对此做了大量的阅读。我想我只是需要帮助连接最后几个点

这适用于后端带有Web API的SPA。所以我自然而然地倾向于持有OAuth代币

我已经设法让事情以一种曲奇饼般的方式进行,使用了来自的一些指导。我采用了它的方法,现在我可以登录Facebook,当回调操作被点击时,User.Identity成功设置为我的Facebook声明标识

问题是,对于我的Web API,我希望调用auth/facebook,或者通过其他方式,将我的身份的OAuth承载令牌获取给用户,以用于将来的请求,而不是cookie

从某种意义上说,我最好还是从这个饼干变成一个代币?怎么做?还是有更好的方法

这是我的Startup.cs代码

public class Startup
{
    // public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; }

    public void Configuration(IAppBuilder app)
    {
        ConfigureOAuth(app);

        // other standard stuff (I think)
    }

    private void ConfigureOAuth(IAppBuilder app)
    {
        // lots of commented out code of me trying to do this using a custom provider and OAuth

        var cookieOptions = new CookieAuthenticationOptions
        {
            LoginPath = new PathString("api/auth/facebook")
        };

        app.UseCookieAuthentication(cookieOptions);
        app.SetDefaultSignInAsAuthenticationType(cookieOptions.AuthenticationType);

        app.UseFacebookAuthentication(new FacebookAuthenticationOptions
        {
            AppId = fbAppID,
            AppSecret = fbAppSecret,
        });
    }
}
这是我的身份验证控制器代码

[RoutePrefix("api/auth")]
public class AuthController : ApiController
{
    [AllowAnonymous]
    [Route("facebook")]
    public IHttpActionResult GetFacebookChallenge()
    {
        return new ChallengeResult("Facebook", "api/auth/callback", this.Request);
    }

    [Route("callback")]
    [HttpGet]
    public IHttpActionResult Callback()
    {
        var info = Request.GetOwinContext().Authentication.GetExternalLoginInfo();
        return Ok(info);
    }
}
当前,回调操作返回null,因为info为null,但是User.Identity设置了正确的声明,一切都很好。以前的一个实现使其处于回调不会对User.Identity进行身份验证的状态,但它可以检索外部登录标识。但同样,我无法通过身份验证并从中获取令牌。我是否更接近这种方法


很抱歉问了这么长的问题。如果你需要我发布更多的代码,请让我知道,为了简洁,我已经尽量减少了

根据对你的问题的快速回顾,你似乎对cookie有问题。。存储在cookie中的令牌,您希望在服务器端而不是cookie中使用该令牌,对吗?嗨,使用像这样工作的应用程序,我将cookie或auth令牌存储在SPA中,然后将其与后续HTTP XHR请求一起作为自定义头传输(X-HTTP-auth-token={cookiedata}。在我的情况下,这些令牌非常小,因此如果令牌很大,则不太好。我总是在这里创建自定义身份验证处理程序。您有两个选项。您可以在每次请求时使用Facebook或您使用的任何身份提供器重新验证该令牌。或者,在我的情况下,您在数据库中信任该令牌一段时间。