我正在使用asp web api 2和asp身份构建saas应用程序。此API将由Web,移动和桌面应用程序使用。如何确保所有对我的web api方法的调用都是经过授权的?在网络上,我们可以要求用户在访问某个页面之前登录,但是如何回合移动/桌面?用户是否需要在每次通话时提供登录名和密码?有更好的解决方案吗?我一直在寻找并没有找到任何关于此的文章。非常感谢一个或多个样本。
答案 0 :(得分:1)
通常在使用api作为后端时,您必须在每次请求时对用户进行身份验证。
(它实际上也发生在其他框架上,例如mvc.net,但它们使用cookie跟踪用户,这些cookie随每次请求来回发送)
我建议您使用基于令牌的身份验证(例如OAuth)。在这种情况下,您可以在请求的标头中设置令牌。此令牌将用于验证(并可能授权)用户。
如果您需要更多信息,我可以随时解释一下。
==编辑:添加了代码示例==
您可以使用请求处理程序来验证请求的标头是否包含有效标记:
public class AuthorizationHeaderHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage pRequest, CancellationToken pCancellationToken)
{
IEnumerable<string> apiKeyHeaderValues = null;
if (!pRequest.Headers.TryGetValues("Authorization", out apiKeyHeaderValues)
|| !TokenRepo.IsVallidToken(apiKeyHeaderValues))
{
var response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("{\"error\": \"invalid_token\"}")
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return Task.Factory.StartNew(() => response);
}
return base.SendAsync(pRequest, pCancellationToken);
}
}
您所要做的就是保持哪个令牌与哪个用户相关联,并确保令牌有一个有效期。一旦通过,它也将无效。
我希望这会澄清一点。 同样,如果您有更多问题,请不要犹豫。