外部登录和C#Web API

时间:2019-01-26 06:14:12

标签: c# login .net-core asp.net-core-webapi

我是.NET核心的新手,虽然我具有.NET经验,但是我从未构建过身份验证,过去我一直在从事不是由我启动的项目。我只是想学习并找到好的资源,如果有人知道本教程或者它可以解释如何解决这个问题,我将不胜感激。

使用外部登录名时,我遵循了这些说明here。如果我创建一个简单的Web api项目并运行,所有这些都将很好地工作,我将获得一个可以登录,验证和完美运行的网页。但这不是我的最终目标,我正在构建Web API而不是Web应用程序。就我而言,假设我有iOS和Android应用程序,并且外部登录是在应用程序本身上完成的,我如何将令牌传递给Web API?我想在Web API中使用[Authorize]方法,以确保没有对API进行未经授权的访问,此外,我还想使用角色。

我假设令牌信息在标头中传递。但是令牌的标题名称是什么?可以将外部身份验证与角色一起使用,还是仅当我存储用户名/密码时才可以?您能为我指出一些好的教程还是在任何我可以学到更多的地方,因为所有的google搜索都返回到我上面提到的相同的位置,并且描述性不强。

2 个答案:

答案 0 :(得分:1)

您可以具有一个允许匿名访问并获取令牌并对其进行验证的终结点。然后,它可以发送回JWT,其中包含您要对特定用户强制执行的声明/角色。每次客户端访问安全端点时,它可以在标头中发送JWT,该标头在调用API控制器中的特定方法之前已得到验证。如果要集成社交登录名,可以查看OAuth流。 例如,Google拥有有关OAuth-的文档 https://developers.google.com/identity/sign-in/web/backend-auth

答案 1 :(得分:1)

通常,您的Web api会像身份提供者一样工作,它将发出并验证JWT令牌:

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

您还可以在外部登录提供商的帮助下实现授权。如果您的客户端应用中具有SDK或自己的代码以帮助进行身份验证,那么对于授权部分,您还可以在同一身份提供商中注册Web api。例如,您在客户端应用程序中使用google身份验证外部登录名,则应在google的应用程序注册页面上注册客户端应用程序和Web api,然后可以使用OpenID Connect Hybrid Flow来认证用户并获取访问令牌以访问Web api。每个身份提供者都提供了如何对大量文档实施身份验证/授权的方法。