如何在ASP.NET MVC Web Api上使用外部身份验证服务

Van*_*nel 10 c# asp.net asp.net-mvc facebook-login

我正在使用Visual Studio 2013,C#和.NET Framework 4.5.1开发ASP.NET MVC Web Api。

我在读这篇文章,这很有趣。它仅讨论ASP.NET MVC应用程序,没有提及如何使用Web Api实现它。

我想我可以将其与Web Api一起使用,但是我不知道如何使用,因为正如我在文章中所读到的那样,我将需要一个登录页面,而Web api没有该页面。

如果我将通过手机(iOS,Android,Windows Phone等)使用该Web API;我需要做什么?

也许我需要在移动应用程序上登录表单,或者我需要在Web API上登录页面以允许在Google,Facebook等上登录。

有什么建议吗?

PRB*_*PRB 6

@VansFannel,这是一个古老的问题,我猜您已经继续前进,但是我将其留在这里供以后的求职者使用。

您是正确的,它没有提供登录页面,但是提供了登录页面本身将使用的内容。

开始之前,请下载一个名为PostMan的Chrome插件。在使用过程中,我将显示一些屏幕截图。我已经设置了一个基本的WebAPI,其中仍带有示例Values控制器,但是受[Authorize]保护。对于本示例,我正在http:// localhost:54211上运行示例WebAPI 。

这是一个高级过程:

创建一个用户

我猜您在这个新数据库中还没有任何用户,但是如果您这样做,请跳过此步骤。否则,这就是在没有UI的情况下创建它们的方式。

如果正文为空并且标头状态为200,则说明成功:

如果失败,您将返回标头状态错误400和正文中的某种错误,例如:

验证中

好的,我们在数据库中有一个用户,让我们通过WebAPI进行身份验证。

  • POST到http:// localhost:54211 / token
    • 该帖子应为x-www-form-urlencoded,并应包含以下字段:
    • grant_type ---设置为“密码”
    • 用户名---例如“ test@somedomain.com”
    • 密码---例如“ Test123!”

在服务器的结果中,如果成功(状态200),您将获得所谓的“承载者令牌”-位于“ access_token”字段中,如下所示:

为了进行测试,请将令牌值复制到剪贴板(在您的应用中,您可以将其存储在变量中)。

使用Bearer令牌调用We​​bAPI方法

如果您尝试在未通过身份验证的情况下调用[Authorize]受保护的方法,则会看到类似以下内容:

但是您已经通过身份验证了,对吗?那它为什么不认识你呢?因为它是基于REST的并且是无状态的-通话完成后不再认识您。因此,每次拨打电话时,您都必须“提醒”您的身份。为此,您可以传递每个请求之前收到的令牌。

  • 使用所需的任何动词(GET,POST等)调用URL(http:// localhost:54211 / api / Values /)。我在下面使用GET,因为在ValuesController中这是必需的。
    • 在请求的标头中,添加以下字段:“授权”,其值为“ Bearer [token]”,其中[token]是您之前存储的令牌。

如果您获得成功(200分),则可以检查它的身体数据,它将得到您的回应:

就是这样完成的!希望对您或其他人有帮助。


Rah*_*ath 0

Web API 支持通过 owin 管道与 facebook、twitter、microsoft、google 等社交网络集成。

在这里找到一个示例,它为 Web API 提供 Facebook 登录支持。