使用从多租户应用程序检索的访问令牌在客户租户中调用 APIM

时间:2021-05-12 06:57:17

标签: c# .net-core azure-active-directory multi-tenant azure-api-management

我有一个 MT 应用程序,用于在我的多租户应用程序中授权用户。 当用户登录时,我会验证 id 令牌的颁发者是否是 AzureAd 的已知租户。使用租户的 GUID。

就像一个魅力:D

现在客户希望我通过调用通过 APIM 公开的 API 对他们的源系统进行一些“回写”。

我认为这就是 OIDC/oAuth 的全部内容,但我找不到关于如何执行此操作的任何好的示例。

我遇到的第一件事实际上是如何获取访问令牌。

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.AzureAD.UI;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;

services.AddAuthentication(AzureADDefaults.AuthenticationScheme).AddAzureAD(o =>
                     {
                         o.OpenIdConnectSchemeName = AzureADDefaults.OpenIdScheme;
                         o.Instance = "https://login.microsoftonline.com/";
                         o.TenantId = "organizations";
                         o.CallbackPath = "/signin-oidc"; 
    
    
                 OnTokenValidated = e =>
                 {
                     //This can not be the way to do it. but for now. 
                     var accestoken = e.SecurityToken.RawData; //This is the AccessToken

现在我将访问令牌存储在 cookie 中,这可能不是最好的方法, 我看到一些文档提到了 SaveToken 选项,但似乎不是 AddAzureAD 扩展选项的一部分。

之后使用授权标头中的访问令牌调用 APIM 应该可以解决问题吗? 或者我需要在 apim 中注册一些应用程序吗?

任何人!

我在黑暗中摸索 :D

1 个答案:

答案 0 :(得分:0)

<块引用>

之后使用授权中的访问令牌调用 APIM 头应该做的伎俩?还是我需要注册一些应用程序 在 apim 中?

正如您在评论中所说,您获得的是身份令牌而不是访问令牌。您需要修改代码并使用 HttpContext.GetTokenAsync("access_token") 获取访问令牌。

另外,你不需要在apim中注册应用程序,因为你已经有一个多租户应用程序,你只需要将它添加到客户租户中,我认为你已经这样做了。

最后,顺便说一句,不要忘记添加policy