当前位置: 首页 > 知识库问答 >
问题:

如何获取 AD 访问令牌并将其传递给 Web API 控制器?

匡晟
2023-03-14

如何从 login.microsoftonline.com 获取AD访问令牌并将访问令牌传递给Web api控制器?因为我需要“访问令牌”才能通过 post 请求传递到另一个合作伙伴公司网站 URL。

下面的代码按照预期进行AAD认证,但我也需要“访问令牌”,

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));

        services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
        {
            options.Authority = options.Authority + "/v2.0/";


            options.TokenValidationParameters.ValidateIssuer = false;
        });

        services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

共有2个答案

仲孙默
2023-03-14

嗨,请下载并按照示例中提供的说明进行操作。它帮助你首先设置 Web APi,并提供一个客户端应用程序,该应用程序首先登录用户,然后获取 Web API 的访问令牌

如何保护使用ASP.NET核心构建的Web API

一旦您可以让样本工作,您就可以用合作伙伴的Web Api替换样本的Web Ap。

姜奇
2023-03-14

上面的代码片段附在原始帖子中,没有公开访问令牌,但它在内部设法获取访问令牌

您可以在身份验证后获取令牌:

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0/";         // Microsoft identity platform
    options.SaveTokens = true;
    options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
});

并在控制器中获取tokes:

var idToken = await HttpContext.GetTokenAsync("id_token"); 

但是对于您的代码片段,它不会返回访问令牌,因为您正在实现登录过程,而不是令牌请求。您应该使用ADAL/MSAL获取访问令牌以访问受保护的API。请在此处查看代码示例。

我从何处获得访问令牌

您可以从这里和这里理解令牌签名的验证。

 类似资料:
  • 我使用Azure AD作为具有IdentityServer4的外部IdP。要调用受AzureAd保护的API,我需要从Azure Ad获取访问令牌。是否可以在登录过程中获取访问令牌并将其保存到声明中? 我正在使用IdentityServer4快速启动UI。我试图在外部令牌的回调方法中捕获访问令牌,但在HttpContext或声明或ProcessLoginCallbackForOidc方法中没有找到

  • 是否可以通过context将对象(比方说User(包含3个字符串属性-name、password、detail)传递给thymeleaf模板,并从模板中访问它的属性,例如 ? 如果是这样,我该怎么做? 匿名用户 如果你正在使用spring和thymeleaf,那么它们应该像魅力一样为你工作。在这种情况下,它非常简单: 其中myTemplate引用,其内容如下所示: 和我的实体 和我使用的沉香酒的版

  • 问题内容: 我们可以使用get本地时区名称,但该名称与不兼容。 实际上,返回的名称是不明确的。此方法在我的系统中返回,但是“ CST”可以指示四个时区: 中部时区(北美)-在北美中部时区观察 中国标准时间 中原标准时间-台湾现在很少使用“中原标准时间”一词 澳大利亚中央标准时间(ACST) 问题答案: 解决此问题的一种非常简单的方法: 更新 :@MartijnPieters说“这不适用于DST /

  • 我想把一个id作为用户的输入,传递给控制器,得到特定id的数据 当我在URL--http://localhost:8080/student/1中手动传递id时,它就起作用了 Whitelabel错误页面此应用程序没有/Error的显式映射,因此您将其视为一种后退。 Wed Jun 19 11:04:22 IST 2019出现意外错误(Type=内部服务器错误,Status=500)。模板分析过程中

  • 获取访问令牌的文档中的第一步是“将用户引导到我们的授权URL”。那到底是什么意思?没有提供链接或任何东西。它还说“公司名称、联系电子邮件和隐私政策URL是开始提交的必要条件。”我们的应用程序没有隐私政策...只是一个简单的标签提要。我不明白为什么有一个简单的标签提要那么复杂。 是否有一个等待时间来获得批准的应用程序..如果它得到批准...在获得访问令牌之前,我必须获得批准吗?这在任何地方都没有概述

  • 我正在尝试反应表,对反应一般是很新的。现在,在下面的代码中,一个本地JSON(mock_data.JSON)被传递到常量数据中。我想用从URL获取的数据替换本地JSON。我怎么能那样做?谢谢:)