我有一个REST API应用程序,它从HttpContext获取有关登录用户的信息。
另一方面,我有一个ASP.NET Core MVC应用程序,它提供用户身份验证。
如何调用第一个应用程序的端点并传递有关登录用户的信息?
答案 0 :(得分:0)
问题在于您正在处理两种不同的身份验证方案。传统网站(您的ASP.NET核心MVC应用程序)使用cookie身份验证。成功登录后,服务器会设置cookie。在每个后续请求中,浏览器将此cookie发送回服务器,实质上是授权请求。
API略有不同。首先,他们通常不使用cookie。其次,由于您通常通过瘦客户端(AJAX,HttpClient
等)发出请求,因此不会自动发生任何事情。虽然Web浏览器被编程为执行此cookie改组,因此用户无需考虑它,如果您未能将请求与API一起发送以授权它,则它根本就没有被授权。
通过API授权的典型方法是身份验证令牌。客户端将首先访问API上的端点进行身份验证,其中必须在请求正文中传递某种形式的凭据。然后,API使用身份验证令牌进行响应。然后,客户端可以通过在Authorization
请求标头中包含此标记来继续请求其他受保护的端点。
长短,如果您只是浏览浏览器中的某个网站并登录,这并不意味着您现在已经登录了API,即使您实际上是在向API发出请求相同的浏览器。
虽然可以设置单个应用程序来提供多种身份验证方法,但它需要一些工作,您必须决定如何处理身份验证/授权,并找出如何有效地实现它
就个人而言,我建议只使用IdentityServer。它可以与现有的身份设置相结合,但几乎可以为您提供开箱即用的所有功能。您可以执行令牌身份验证,JWT甚至OAuth工作流程。它也像啤酒和开源一样免费。