2015-01-17 72 views
0

我目前正在研究一个解决方案,其中包括一个多租户webApi,将被多个客户端访问,其中一些我将创建,其他一些将创建。 访问API将通过ApiKey &秘密(足够用于某些资源)以及用户名&密码(用于所有者资源)提供。浏览器和Web服务器API认证令牌

目前,我创建的客户端(.Net MVC Web应用程序)拥有自己的成员系统,因此客户端的用户登录到客户端系统并且客户端系统将登录信息传递给Api检索身份验证令牌。

客户会员系统实际上是一个不必要的抽象。我真正想做的是让用户直接登录到api,然后api传回一个可以从浏览器中使用的身份验证令牌以及.Net MVC客户端应用程序。

我的问题是,它是实现这一目标的最佳方式。在我看来,我似乎正在努力解决2个问题。

1)有一个基于浏览器的登录(例如ajax/AngularJS)解决方案,它调用api来检索一个令牌,然后将该令牌传递到将存储它的MVC客户端(可能会话变量)。以后任何来自.Net MVC客户端的api调用都可以传递令牌。尽管这对我来说似乎是错误的。我甚至不确定这是可能的。

2)利用其中一个OAuth流程,以便基于浏览器的登录可以调用API并检索令牌,然后OAuth流程重定向到MVC客户端,然后MVC客户端为该用户存储令牌(同样,在会话中变量)。

使用使用Owin本地帐户的VS2013的WebAPI模板生成API并产生通过ValidateClientCredentials和ValidateResourceOwnerCredentials令牌流,但我想我需要使用这个场景流动的其他OAuth网之一。

我知道另一种解决方案是绕过.Net MVC客户端代码,并使用knockout或AngluarJS创建一个完全基于浏览器的解决方案,但这是一个相当复杂的系统,目前我没有时间做到这一点所以我正在寻找一种解决方案,它允许我从api中检索一个令牌,该API可以从我的.Net MVC客户端和浏览器的ajax调用中使用。

任何想法,建议将不胜感激。

在此先感谢。 Justin

回答

0

如果您依赖Azure AD作为您的凭证存储和身份验证系统,那么您将能够利用现成的JS库来自动处理身份验证,AJAX调用和会话管理问题:请参阅http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/。 如果您不能依赖Azure AD,则上面提到的库和样本的代码仍然可以作为构建您自己的系统的参考 - 只要您决定使用的认证系统具有相似的功能。 HTH V.

+0

谢谢@vibronet,我会研究它并发布我的结果。 –