是否可以使用ASP.NET Core Identity(基于Cookie)保护WebAPI?

时间:2019-01-23 20:57:47

标签: c# asp.net-core

我认为我有点误解

Identity = only MVC - returning Views

WebAPI => you gotta go for token-ish way of authentication like JWT

所以,我想问

Is it possible to use that default AspNetCore's Identity with WebAPI?

或者我应该问Is javascript post/get attaching Cookies to it?

4 个答案:

答案 0 :(得分:1)

是的,有可能。不过,某些JS库要求您启用cookie的传递。例如,Axios要求您设置withCredentials:true。

答案 1 :(得分:0)

您可以使用或Identity(cookie身份验证)基于令牌的身份验证(例如OAuth),也可以同时使用两者。这取决于您的需求。

在javascript中,您可以发送cookie和授权标头进行授权。

答案 2 :(得分:0)

  

是否可以将默认的AspNetCore身份与WebAPI一起使用?

是的。它将像在默认Asp.Net Mvc模板中一样工作。您的AccountController可能看起来像这样:

public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    public AccountController(SignInManager<ApplicationUser> signInManager)
    {
        _signInManager = signInManager;
    }

    public async Task<IActionResult> Login(string login, string password)
    {
        var result = await _signInManager.PasswordSignInAsync(login, password, true, lockoutOnFailure: false);

        if (result.Succeeded)
        { 
            //process successful result
        }
        else
        {
            //process failed result
        }
    }
}

SignInManager<>.PasswordSignInAsync()将分配必要的cookie以处理身份验证。

答案 3 :(得分:0)

从技术角度来看,Cookie只是一个HTTP标头,就像Authorization标头一样,因此您可以使用Cookie保护您的API。

事实上,如果您的API只是在同一域中提供SPA,那么cookie是一种更好,更安全的选择。

令牌基础身份验证适用于API为具有不同访问级别的不同域上的多个客户端提供服务的方案。在这种情况下,将身份验证服务器与API服务器分开是很有意义的。

我建议阅读以下文章:

Be careful of the JWT hype train

Please Stop Using Local Storage