Azure active directory 如何配置WebApp&;具有不同AAD应用程序ID的WebApi?

Azure active directory 如何配置WebApp&;具有不同AAD应用程序ID的WebApi?,azure-active-directory,asp.net-core-2.0,openid-connect,Azure Active Directory,Asp.net Core 2.0,Openid Connect,我目前有两个应用程序服务 Web应用程序(Asp.net core 2,带react中的前端) Web Api(Asp.net核心2) 注意:两者都配置了不同的Azure active directory应用程序id 用户登录到Web应用程序并检索存储在tokencache中的自己的appId/ClientId/ClientSecret的令牌 从WebApp,用户希望与WebAPI对话,但需要获取令牌,因为它也受AAD保护,但它是不同的应用id/客户端id/客户端机密 问题: 当我尝试为web

我目前有两个应用程序服务

  • Web应用程序(Asp.net core 2,带react中的前端)
  • Web Api(Asp.net核心2)
  • 注意:两者都配置了不同的Azure active directory应用程序id

  • 用户登录到Web应用程序并检索存储在tokencache中的自己的appId/ClientId/ClientSecret的令牌
  • 从WebApp,用户希望与WebAPI对话,但需要获取令牌,因为它也受AAD保护,但它是不同的应用id/客户端id/客户端机密
  • 问题: 当我尝试为web api执行AcquireTokenSilentAsync()时,会出现一个错误,提示令牌不在缓存中

    另外,根据您使用的是AAD v2.0还是v1.0,似乎还将决定web应用程序和web api是否可以具有不同的应用程序ID。所以我似乎不得不使用AADV1.0。对于Asp.net core 2,我不清楚OpenIdConnect在使用什么或配置在封面下使用什么

    问题:

  • 我不清楚acquire令牌静默异步为何不工作并失败。是否只在缓存中查找令牌;否则它会失败吗
  • 是否可以将web应用中的令牌配置为具有访问web api资源的权限。我注意到在azure门户中,您可以选择microsoft graph之类的资源,但我不知道如何关联自定义API。在我的例子中,我希望在我将其全部移动到azure之前在本地机器上运行它
  • 如果web应用令牌没有访问web api的权限,那么即使您和web应用令牌位于同一租户内,我是否需要对该用户进行另一次登录验证 感谢您的建议, 德里克

  • 是的,AcquireTokenSilentAsync将查看缓存中是否可以找到令牌。如果是,它将检查访问令牌是否仍然有效并返回。如果令牌过期,它将使用刷新令牌获取新的访问令牌并将其返回。当此调用失败时,它是您需要执行AcquireTokenAsync的一个指示器(在已失败的情况下可能会显示UI)

  • 是的,您可以关联一个web应用程序,为您自己的自定义web API获取令牌。我建议使用Azure AD v1.0(在ADAL库中注册应用程序)。您需要注册这两个应用程序(web app和api),它们的类型都是web app/api。在API中,您可以注册一个
    应用程序ID URI
    ,该URI将用作此API的资源标识符。在web应用程序中,您需要进入所需的
    权限
    ,并添加已注册为权限的web API。然后,在web应用程序中,您需要使用ADAL库(以及OpenID OWIN中间件)来获取由app ID URI字段指定的资源令牌。实现您所描述的场景的代码示例(ASP.NET核心中的Web App/API)