2017-01-23 99 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