我有一个启用了CorsFeature的服务堆栈Web服务。
我通过AngularJS的$ http.get方法调用服务,并将withCredentials设置为true:
$http.get(url,{ withCredentials: true})
如何安全地传递其余api使用的凭据?
答案 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以避免公开传输中的凭据。这意味着保护用户名和密码值以及会话令牌值。
希望这有帮助。