我使用本教程为我的WebAPI设置了一个Asp.Net Identity系统:http://www.binaryintellect.net/articles/b957238b-e2dd-4401-bfd7-f0b8d984786d.aspx,一切都很好,唯一的区别是我使用React + Redux作为我的前端发送动作调用负责用户注册和登录的WebAPI。
当注册用户成功创建并添加到数据库时,登录signInManager.SignIn()会返回成功,所以一切都很棒。
但是,对其他WebAPI操作的后续调用不会向用户显示要进行身份验证的情况。我不确定为什么会这样,并且只能假设它必须与我分别使用WebAPI或我的前端不同的事实。
我在此示例后尝试过使用Cookie身份验证,但它没有帮助:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x
我尝试的另一件事是在前端使用ProxyController。因此,React + Redux在代理控制器操作上运行fetch,然后依次调用WebAPI。我认为如果我对WebAPI的所有动作调用都使用相同的HttpClient(也许它会保留某种形式的状态?),这可能会有效。
下面的代码是我尝试的:
HttpClient httpClient;
[HttpGet("[action]")]
public async Task<JsonResult> Login(string username, string password)
{
HttpResponseMessage responseMessage;
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get,
"http://localhost:62356/api/mywebapi/login?username=" + username + "&password=" + password);
responseMessage = await httpClient.SendAsync(request);
}
var json = JsonConvert.DeserializeObject(await responseMessage.Content.ReadAsStringAsync());
return new JsonResult(json);
}
// api/mywebapi/test tries to confirm through signInManager is user is signed in
//using: (!signInManager.IsSignedIn(HttpContext.User)) which returns false, // if I
add an [Authenticate] decorator to the 'Test' action function the below code
returns a 404...
[HttpGet("[action]")]
public async Task<JsonResult> Test()
{
HttpResponseMessage responseMessage;
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,
"http://localhost:62356/api/mywebapi/test");
responseMessage = await httpClient.SendAsync(request);
}
dynamic result = new System.Dynamic.ExpandoObject();
return new JsonResult(result);
}
这个等式中是否有我遗漏的东西?