使用Google OAuth保护aspnet核心中的Web服务

时间:2017-07-14 16:09:28

标签: authentication asp.net-core google-oauth2 google-openid asp.net-core-identity

我迷失在OAuth和OpenIDConnect以及aspnet核心中间件中。任何有关这方面的帮助将不胜感激。

我有多个使用同一组Web服务的UI(Web,本机应用程序),我想确保只有经过身份验证的用户才能访问Web服务。我的组织使用Google帐户,因此我希望将Google身份验证限制在组织域中。

this sample之后,网站正确地要求进行身份验证。我现在需要的是让网站(AngularJS 4)使用我可以通过Google验证的身份验证令牌来调用我的后端Web服务。

后端服务是用aspnet核心编写的。我尝试过使用这些方法:Google middlewareGoogle OpenIDConnect但这些仍然1)假设有一个UI可以提示未经授权的用户登录,2)似乎是基于cookie的,并且我不会为网络服务电话提供cookie。

我不想提示用户登录,因为在这种情况下“用户”是软件客户端。要么已经过身份验证,要么已经过身份验证。我只需要获取身份验证令牌,验证它,然后继续。

This appears to be the same question,尚未得到回答。

任何建议都表示赞赏。此外,有关本机应用程序的建议或提示也是如此!

2 个答案:

答案 0 :(得分:3)

搞定了。如上所述,我迷路了,OpenIDConnect虽然在几个方面被引用作为解决方案,但却是Web服务的红色鲱鱼。这里有什么对我有用,我可以提供完整的步骤(需要一些清理):

  1. 向用户界面添加身份验证following these directions
  2. 获取JWT令牌as shown in the first segment here
  3. 在每次Web服务调用中,在标题中包含JWT标记:

    名称:身份验证

    价值:持票人{令牌价值}

  4. 安装JwtBearer NuGet package

  5. 在Web服务的Startup的ConfigureServices方法中,在AddMvc()之后:

            JwtBearerOptions jwtOptions = new JwtBearerOptions();
            jwtOptions.Audience = "{the OAuth 2.0 client ID credential from google api developer console}";
            jwtOptions.Authority = "https://accounts.google.com";
            jwtOptions.TokenValidationParameters = new TokenValidationParameters();
            jwtOptions.TokenValidationParameters.ValidIssuers = new List<string>()
            {
                "https://accounts.google.com",
                "accounts.google.com"
            };
    
            app.UseJwtBearerAuthentication(jwtOptions);
    
  6. 在Configure方法中,在UseMvc():

    之前
      TDest MapSourceToDest(TSource v) {....}
    
      Func<TSource, bool> func = ...;
      Func<TDest, bool> dbFunc = x => func(MapSourceToDest(x));
    
  7. 也许有更合适的方法来做到这一点......如果有的话,我有兴趣尝试一下。目前,这是有效的。

答案 1 :(得分:0)

我会尽力帮助。

首先,您需要查看OpenID Connect(构建于OAuth 2.0之上),记住OAuth 2.0 NOT an Authentication protocol

1)假设有一个UI 假设您使用的是Google服务,则无需用户界面登录。您只需要检查是否存在并验证访问令牌,身份令牌(可能还有刷新令牌)。如果没有令牌,则假定用户未经过身份验证,并使用授权请求将其重定向到身份验证服务器。

如果存在有效的访问令牌和刷新令牌,则可以假设用户已通过身份验证。

您还可以检查访问令牌以获取正确的&#34;范围&#34;确定它们是否为您的特定应用程序授权。

如果您使用Google for Authorization Server,则身份令牌中的validate the the hd parameter可以拥有所需的域。

顺便说一句:没有涉及cookie。

希望有所帮助。