通过angularJs和$ http.get将凭证传递给服务堆栈

时间:2013-12-24 13:22:50

标签: api security angularjs http-headers servicestack

我有一个启用了CorsFeature的服务堆栈Web服务。

我通过AngularJS的$ http.get方法调用服务,并将withCredentials设置为true:

$http.get(url,{ withCredentials: true})

如何安全地传递其余api使用的凭据?

1 个答案:

答案 0 :(得分:4)

在ServiceStack端,您必须将CorsFeature插件设置为allowCredentials = true并设置单个来源。 使用allowCredentials时,您不能拥有*。

withCredentials基本上允许您的原始域和ServiceStack服务端点共享cookie,并传递Authorization HTTP header,(正确配置CORS时)。因此,最终您的凭据可以是会话cookie或Authorization HTTP标头。

Mozilla documentation about CORS擅长解释跨域withCredentials的工作原理。

由于CORS功能和withCredentials仅设置域共享cookie并传递Authorization标头,并且不进行身份验证的能力 - 您需要找到合适的身份验证机制。

您可以构建自己的身份验证机制,也可以考虑实施ServiceStack身份验证提供程序,您可以read about it here。基本上你想要发一个帖子:

POST server:port/auth/credentials?format=json

{
    "UserName": "admin",
    "Password": "test"
    "RememberMe": true
}

身份验证服务会传回会话Cookie,当您在以后的请求中使用withCredentials时,Cookie会自动包含在内,因此您的请求会进行身份验证。

要安全地传递凭据,您需要使用HTTPS以避免公开传输中的凭据。这意味着保护用户名和密码值以及会话令牌值。

Process

希望这有帮助。