代码之家  ›  专栏  ›  技术社区  ›  Kol

如何对angular web app和使用google身份验证。azure上托管的net web api

  •  -2
  • Kol  · 技术社区  · 6 年前

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

    如何获取令牌并将其发送到web api?我已经读到azure应用程序服务应该自动注入必要的身份验证标头,但对我的api的任何调用都不包括这些标头。我是否应该手动调用auth/me并将其添加到请求标头?

    如何让我的web api通过google auth验证来自请求标头的详细信息?我是否需要一个单独的web api客户端id,还是应该重新使用web app客户端id?

    干杯

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bruce Chen    6 年前

    根据您的描述,我假设您正在使用内置 Authentication / Authorization 由Azure应用程序服务提供。

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

    对于angular web应用程序,您可以只使用服务器管理的流,在用户成功登录后,您需要调用 https://<your-angular-app-name>.azurewebsites.net/.auth/me 检索google access_token ,然后针对web api端点发送以下请求,以检索 authenticationToken 具体如下:

    POST https://<your-webapi-app-name>.azurewebsites.net/.auth/login/google
    Body {"access_token":"<the-google-access-token>"}
    

    成功检索后 authenticationToken 从Web API端点,您可以发送以下访问API的后续请求:

    GET https://<your-webapi-app-name>.azurewebsites.net/api/values
    Header x-zumo-auth:"<authenticationToken-generated-by-your-webapi>"
    

    此外,您还可以在angular web app中使用客户端管理的流,您可能需要直接与您的身份提供商(Google)联系,通过 Auth0 google-signin 或其他第三方库。然后,您可能需要向angular web app和web API web app发送请求,以检索 authenticationToken 如上述要求样品。

    我是否需要一个单独的web api客户端id,还是应该重新使用web app客户端id?

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