Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net web api的身份验证和授权相关问题_Asp.net_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

asp.net web api的身份验证和授权相关问题

asp.net web api的身份验证和授权相关问题,asp.net,asp.net-mvc-4,asp.net-web-api,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我必须开始一个新的项目,用MVC4和WebAPI开发。我以前有MVC4的经验,但使用WebAPI这将是我的第一个项目。我知道web api是供不同平台使用的 我对web api有一些担忧。我向大家介绍如下: 1) 我首先关心的是用户身份验证。我仔细研究了这个问题,并遵循了选定答案中给出的答案。我还有几个问题: a) 当我们通过表单身份验证进行用户身份验证时,我们创建了一个cookie,跟踪用户是否经过身份验证,但使用web api我们不存储cookie,而是在内容头中传递用户凭据。我不知道在这种

我必须开始一个新的项目,用MVC4和WebAPI开发。我以前有MVC4的经验,但使用WebAPI这将是我的第一个项目。我知道web api是供不同平台使用的

我对web api有一些担忧。我向大家介绍如下:

1) 我首先关心的是用户身份验证。我仔细研究了这个问题,并遵循了选定答案中给出的答案。我还有几个问题:

a) 当我们通过表单身份验证进行用户身份验证时,我们创建了一个cookie,跟踪用户是否经过身份验证,但使用web api我们不存储cookie,而是在内容头中传递用户凭据。我不知道在这种情况下如何跟踪用户的登录状态

b) 我的另一个担忧是限制未经授权的访问,如果我没有错的话,我想我可以在上面提供的链接1和链接2中找到这一点

c) 我也查看了Edward Brey的答案(在同一个SO问题中)以进行身份验证,但我没有完全理解

2) 我的第二个疑问是表单身份验证和基本Http身份验证的混合。是否可能登录时使用表单身份验证,然后使用基本http身份验证来使用web api?如果是,请指导我

我的问题可能听起来不太合适,但请记住我的话。a)Restful API是无状态的,因此您没有跟踪用户的登录状态,而是发送了对每个请求进行验证的凭据

1.b)是的,如果不是的话,网络上有很多关于这方面的文章。授权过滤器可以帮助您实现这一点

1.c)简而言之,他提到了在执行API中的任何方法之前授权用户的简单逻辑。在控制器中执行任何方法之前,调用
确保重新验证
,或将该逻辑放入授权筛选器中

2) 是的,你能做到。在RESTfulAPI中,每个调用都可以是一个新实例,您可以通过API请求传入凭据,无论您在做什么

如果您讨论您提供的链接1,您将看到:

在我们的特定示例中,服务器通过编码生成auth令牌 连接的用户名和密码为Base64(与 ,并通过 执行“登录”操作时的HTTP标头。那么客户呢 存储此身份验证令牌,并随每个后续请求一起发送 需要它

如果auth令牌的格式是众所周知的(就像我的情况一样), 您也可以自己在客户机上生成并发送它 而不让服务器做这项工作


您可以使用登录名为客户端生成身份验证令牌,您可以使用该令牌发送附加到web api请求中。

感谢您的回复。对于问题2,当表单身份验证完成时,将用户凭据传递给web api的最佳方式是什么?或者你能建议的其他方法?我已经更新了答案。让我知道这是否有帮助,但我反对在每个请求中传递凭证,所以最好用其他方式生成令牌,比如用户名密码组合的散列。太好了!!。我考虑的是会话变量,但将令牌存储到会话中,就像会话[“令牌”]={encrypted token};好主意?