如何使用Google身份验证在C#Web API内部进行身份验证?

时间:2019-07-04 15:06:26

标签: asp.net-web-api oauth oauth-2.0 google-authentication

我正在开发C#Web Api(.NET Framework),并希望并行使用AAD身份验证(已经正常工作)和Google身份验证。这意味着,我的客户(JavaScript或仅Postman)应该获取令牌,将其包含在Authorization标头(Bearer令牌)中,并能够执行API方法。

但是,我用Postman生成的令牌似乎没有被我的C#Web Api接受。我总是收到HTTP401。AAD(Windows Azure Active Directory)可以无缝运行。

使用C#Web Api(.Net Framework 4.6.1),包括Microsoft.Owin.Security.Google Nuget软件包4.0.1。

我已经在Google开发人员控制台上创建了Oauth客户端,获取了我的客户端ID和客户端密码。另外,我还在此处设置了重定向URI。

我正在使用Postman Oauth2授权,设置以下参数:

然后,我可以使用我的Google帐户登录,同意使用范围,并获得这样的令牌:

访问令牌 ya29.Gls7 ....

此令牌然后作为授权标头发送,例如“ Bearer ya29.Gls7 ....”

Startup.Auth

 public void ConfigureAuth(IAppBuilder app)
        {
            app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                 new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                 {
                     Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                     TokenValidationParameters = new TokenValidationParameters
                     {
                         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                     },
                 });

            app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
            {
                ClientId = ConfigurationManager.AppSettings["GoogleClientId"],
                ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"],
            });
        }

ValuesController

public class ValuesController : ApiController
{
  [Authorize]
        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }
}

每次使用Postman调用API时,即使在请求授权标头中包含了承载令牌,也会得到401。

HTTP GET https://localhost:44385/api/values/1

编辑:我这边没有可用来验证令牌的自定义代码。我认为这是由图书馆自动完成的。实际上,这对于AAD令牌是自动完成的,但对于Google Oauth则不会。

我希望深入了解控制器方法的代码,并至少使用Google帐户名称/电子邮件设置身份名称。

我想在我的控制器方法中使用Google帐户进行身份验证的地方是什么?

0 个答案:

没有答案