2017-01-23 62 views
1

我正在使用具有Web应用程序和Web API的.NET Core创建项目(我这样做,所以结构可以是n层)。两者都使用OpenID/Azure Active Directory进行身份验证。用户可以毫无问题地登录到Web应用程序。用户登录到Web应用程序时通过AJAX访问.NET Core Web API

我需要从Web应用程序端(在代码隐藏中 - 这是完成的)和从用户的浏览器通过AJAX访问我的API。那是我卡住的地方,不知道如何继续。这些cookie全都是HTTPOnly,所以我无法从Javascript端访问它们。而且,Web API与Web应用程序位于不同的基本URL。

我确实在Azure设置中有我的应用程序,因此登录到Web应用程序也授予登录到Web API的权限(这对于Web应用程序至Web API通信至少是必需的)。

那么,我该如何去从客户端访问我的API?

我很抱歉没有这个代码。我甚至没有找到开始这个的方法。

谢谢!

回答

0

如果您可以将两个应用程序放置在不同的子域中,但是同一个根域(或者您可以将代理类似maindomain.com/api/反向到api.anotherdomain.com),那么您将可以共享cookie。除此之外,Cookie不能在不同的域之间共享。

您可能需要做的是使用另一个基于声明的令牌系统。可能的智威汤逊(https://jwt.io/)。任何对JWT和.net核心的搜索都应该引导您走上正确的道路。

+0

这是目前在本地主机上运行。 Visual Studio将它放在不同的端口上,所以到目前为止,不同的域是唯一的出路。另外,使用Azure AD时,它默认为OpenID,所以我宁愿坚持。 – David

+0

您的身份验证方法不会改变JWT仍然是您最佳选择的事实。智威汤逊是跨领域共享声明的一种方式。如果您的网站对用户进行了身份验证(但发生了这种情况,AD,社交登录等),则令牌简单地返回给用户,说明他们是谁。对于API,它接收到令牌并将其作为福音,他们就是令牌所说的那些人,他们不必重新进行验证。 – MindingData

+0

API实际上使用JWT,但我不明白这是如何帮助我获得令牌的。 – David

相关问题