如何使用google身份验证为角色Web应用程序和托管在azure上的.net web api

时间:2018-04-29 14:54:05

标签: angularjs asp.net-web-api azure-web-sites google-signin google-authentication

我有一个有角度的网络应用程序与c#.net web api后端交谈。 它们都托管在azure app服务上。 Azure应用服务提供一套身份验证服务,我选择使用google身份验证。 我已经在azure google auth中获得了我的谷歌客户端ID和秘密设置,我的网络应用程序正确显示并提示我输入我的谷歌凭据。 我现在的问题是,我需要我的web api后端来验证web app google令牌。我找不到任何演示以下内容的文章或教程:

如何获取令牌并将其发送到网络API?我已经读过azure app服务应该自动注入必要的auth头,但是对我的api的任何调用都不包括那些头。我应该手动调用auth / me并将它们添加到请求标题吗?

如何通过google身份验证让我的网络API验证请求标头中的详细信息?我是否需要为web api单独的客户端ID,或者我应该重新使用Web应用程序客户端ID吗?

干杯!

1 个答案:

答案 0 :(得分:1)

根据您的描述,我假设您使用的是Azure App Service提供的内置Authentication / Authorization

AFAIK,App Service Authentication(Easy Auth)提供两种流程:客户端管理和服务器管理流程。对于服务器管理的流程,服务器代码为您管理登录过程,您的后端将直接从相关身份提供商(例如Google,AAD等)接收令牌,然后生成{{1}用于浏览器应用程序和用于浏览器应用程序的authenticationToken cookie。您可以关注的详细信息Authentication flow

对于您的角网络应用,您只需使用服务器管理的流量,用户成功登录后,您需要致电AppServiceAuthSession以检索Google https://<your-angular-app-name>.azurewebsites.net/.auth/me,然后针对您的网络发送以下请求用于检索access_token的api端点如下:

authenticationToken

成功从Web API端点检索POST https://<your-webapi-app-name>.azurewebsites.net/.auth/login/google Body {"access_token":"<the-google-access-token>"} 后,您可以发送以下后续访问API的请求:

authenticationToken

此外,您还可以在角网络应用中使用客户端管理的流量,您可能需要直接与身份提供商(Google)联系,以通过Auth0或{{3}检索客户端中的access_token或其他第三方库。然后,您可能需要向angular Web应用程序和Web API Web应用程序发送请求,以便检索GET https://<your-webapi-app-name>.azurewebsites.net/api/values Header x-zumo-auth:"<authenticationToken-generated-by-your-webapi>" 作为上述请求示例。

  

我是否需要为网络API提供单独的客户端ID,还是应该重新使用网络应用客户端ID?

根据我的理解,您必须使用相同的Google应用程序。对于AAD身份验证,您可以配置具有对另一个AAD应用程序的访问权限的AAD应用程序。