相关疑难解决方法(0)

使用ASP.NET Web API 2.0和Ionic Cordova应用程序启用社交登录

我有一个ASP.NET Web API 2.0应用程序,我已连接到一个Ionic应用程序,它使用我的API进行登录,注册等.

我正在使用基于令牌的身份验证,以便当用户注册帐户并登录时,他们将被授予访问令牌,该令牌在每个后续请求的标头中传递并用于对用户进行身份验证.这很好.

现在,我希望允许用户通过登录Facebook或Google等社交帐户来注册帐户.

目前,我正在尝试集成Google身份验证,因此在我的Startup.Auth.cs文件中,我启用了它,如下所示:

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions
{
    ClientId = "###",
    ClientSecret = "###",
});
Run Code Online (Sandbox Code Playgroud)

我也有标准的AccountController方法,所以从我的Ionic应用程序,我能够向'RegisterExternal'方法发出GET请求,如下所示:

/api/Account/ExternalLogin?provider=Google&response_type=token&client_id=self&redirect_uri=###
Run Code Online (Sandbox Code Playgroud)

据我了解,此方法返回一个重定向URI,我应该导航到我的应用程序中以允许用户登录.我想我会在我的应用程序中打开一个新窗口以允许用户输入他们的详细信息?

但是,我不认为这是我想采取的方法.对于大多数应用程序,这些天我可以简单地按下"使用Google登录"按钮,它可以完成所有魔法,无需重定向或输入任何信息.

我正在看看Cordova GooglePlus插件,这似乎是我需要的,因为它允许用户登录客户端.成功回调还会返回以下内容:

 obj.email          // 'eddyverbruggen@gmail.com'
 obj.userId         // user id
 obj.displayName    // 'Eddy Verbruggen'
 obj.familyName     // 'Verbruggen'
 obj.givenName      // 'Eddy'
 obj.imageUrl       // 'http://link-to-my-profilepic.google.com'
 obj.idToken        // idToken that can be exchanged to verify user identity.
 obj.serverAuthCode // Auth code that can be exchanged for an access token and refresh token for offline access
 obj.accessToken    // OAuth2 access token
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我是否可以使用此信息传递给我的ASP.NET服务的帐户服务来验证用户并为他们创建一个帐户(如果他们还没有)? …

asp.net google-authentication asp.net-web-api cordova ionic-framework

11
推荐指数
1
解决办法
885
查看次数

使用Google身份验证从Android客户端使用WebAPI2网站

在过去的两天里,我一直在绞尽脑汁,试图了解如何使用内置于Google.NET的ASP.NET WebAPI 2中的身份验证作为外部身份验证,而对OAuth 2并不熟悉,我很失落。我已经按照本教程设置了Android客户端上的登录按钮,并将“ idToken”发送到Web API。我还按照本教程(现在已过时)中的说明将Google设置为外部登录名。

当我尝试发送它{"error":"unsupported_grant_type"}作为响应时,就会发生问题。其他一些教程使我相信,mysite.com / token的POST不包含正确的数据。这意味着我要么在客户端上错误地构建了请求,要么以某种方式在后端上不正确地处理了请求,将其发送到错误的url,或者我在做其他完全错误的事情。

我找到了这个答案,说是从/ api / Accounts / ExternalLogins获取URL,但是登录按钮已经给了我提供给我的访问令牌(如果我正确理解的话)。

如果有人可以帮助我解决从头到尾的确切流程,那就太好了。

更新:好的,这是自问这个问题以来我学到的一些东西。

  1. website.com/token URI是WebAPI2模板中内置OAuth服务器的重定向。这对于此特定问题没有用。

  2. id_token是已编码的JWT令牌。

  3. website.com/signin-google URI是正常Google登录名的重定向,但不接受这些令牌。

  4. 我可能必须编写自己的AuthenticationFilter,它使用Google客户端库通过Google API进行授权。

更新2:我仍在努力获取AuthenticationFilter实现。此时一切似乎进展顺利,但我在某些事情上陷于困境。我一直在使用此示例获取令牌验证代码,并在本教程中获取AuthenticationFilter代码。结果是两者的混合。完成后,我会将其发布在此处作为答案。

这是我目前的问题:

  1. 产生一个IPrincipal作为输出。验证示例创建了ClaimPrincipal,但是AuthenticationFilter示例代码使用UserManager将用户名与现有用户进行匹配,并返回该主体。验证示例中创建的ClaimsPrincipal不会直接与现有用户自动关联,因此我需要尝试将声明的某些元素与现有用户进行匹配。那我该怎么做呢?

  2. 对于什么合适的流程,我还是个不完整的想法。我目前正在使用Authentication标头通过自定义方案“ goog_id_token”传递我的id_token字符串。客户端必须使用此自定义AuthenticationFilter为API上调用的每个方法发送其id_token。我不知道通常如何在专业环境中完成此操作。似乎很常见的用例是会有大量的信息,但是我还没有看到。我已经看到了正常的OAuth2流程,由于我仅使用一个ID令牌,而不使用访问令牌,所以我对于应该使用的ID令牌,它属于流的位置以及使用它的方式有点困惑应该放在HTTP数据包中的位置。而且因为我不知道这些事情,所以我一直在努力地进行弥补。

authentication asp.net-mvc android asp.net-web-api google-oauth

6
推荐指数
1
解决办法
2155
查看次数