我有一个有角度的网络应用程序与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吗?
干杯!
答案 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应用程序。