2013-02-22 68 views
1

鉴于以下各方:ASP.Net MVC 4和基于声明的安全Web客户端之间,ASP.Net的WebAPI

基于浏览器的客户端
ASP.Net MVC 4 Web应用程序
ASP.Net的Web API服务
安全令牌服务(STS),即Thinktecture IdentityServer
(注:Web应用程序和服务的WebAPI住在不同的盒子)

我想获得类似这样的工作流程:

用户导航到WebApp时,应用程序在请求中看不到有效的令牌,并将用户重定向到STS进行验证。用户登录到STS,并在成功验证后重定向回WebApp。 WebApp将看到有效的令牌并授予用户访问权限。用户尝试在WebApp上执行操作,这需要对WebAPI进行服务调用。 WebApp通过服务请求传递用户令牌。 WebAPI服务会查看令牌,禁止访问并返回错误,或代表用户授权请求并返回结果。

此外,我希望客户端能够通过AJAX调用直接向WebAPI服务发起服务调用。

到目前为止,我可以将流程与Web应用程序重定向到STS并返回,但是如何将令牌从Web应用程序传递到Web API服务?

另外,如何让JavaScript客户端在AJAX调用中传递令牌?

回答

1

嗯 - 如果您使用SAML,您可以立即做到这一点。

网站登录返回SAML令牌,saveBootstrapContext功能保存令牌供以后使用 - 并且您可以将其转发给您的web api。

在Web API中,您可以使用SAML用户思维方式identitymodel。对于AJAX调用,提供一种从JS检索SAML令牌并将其在授权标头上发送给Web API的方法。

这不是最优的。但是对于通过JWT来完成(这将是首选方式) - 现在有些位缺失(例如,IdSrv只支持对称签名,我的JWT处理程序不支持引导上下文,MS JWT处理程序和对称签名配置也是一个问题)。

我正在为此工作。但目前这种情况有一些粗糙的优势。

+0

或使用cookie。 – flup 2013-02-22 20:16:02

+0

好吧 - 当然没有cookie。各种组件位于不同的盒子上(可能有不同的域名 - 如果不是今天 - 也许明天)。 – leastprivilege 2013-02-23 08:35:21

0

如果两个服务都位于同一个域中,则可以使用cookie。