【问题标题】:Service to Service authentication with Managed Identity in Azure在 Azure 中使用托管标识进行服务到服务身份验证
【发布时间】:2020-04-25 18:36:17
【问题描述】:

我正在尝试从我的 Azure 函数访问已在 azure 中注册为应用程序的另一个自定义服务的 API 端点。我为我的天蓝色功能启用了托管身份。我使用以下代码获取令牌:

var tokenIssuerAddress = @"uriOfServiceThatImTryingToConsume";
var tokenProvider = new AzureServiceTokenProvider("RunAs=App");
var accessToken = await tokenProvider.GetAccessTokenAsync(tokenIssuerAddress);

似乎很好,因为我得到了一个不记名令牌。但是当我尝试使用令牌调用服务本身时:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", $"{accessToken}");
    var response = await client.GetAsync($"{uriOfServiceThatImTryingToConsume}{path}");
}

我得到 200 OK,但响应是一个 HTML 页面,以以下内容开头:

<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<!DOCTYPE html>
<html dir="ltr" class="" lang="en">

<head>
    <title>Sign in to your account</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="-1">
    <link rel="preconnect" href="https://aadcdn.msftauth.net" crossorigin>
    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link rel="dns-prefetch" href="//aadcdn.msftauth.net">
    <link rel="dns-prefetch" href="//aadcdn.msauth.net">

为什么当我使用我得到的不记名令牌时,我得到一个 HTML 登录页面作为响应?我错过了一步吗?

【问题讨论】:

    标签: azure authentication azure-active-directory bearer-token azure-managed-identity


    【解决方案1】:

    通过在 Azure 中将 api 注册为应用程序,您做了正确的事情。您还必须添加身份验证中间件,如

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                    .AddJwtBearer(o =>
                    {
                        AuthenticationSettings settings = Configuration.GetSection("Authentication").Get<AuthenticationSettings>();
                        o.Authority = settings.Authority;
                        o.TokenValidationParameters = new TokenValidationParameters
                        {
                            ValidAudiences = new[]
                            {
                                settings.ClientId,
                                settings.ApplicationIdUri
                            }                        
                        };
                    });
    

    然后在管道中添加“UseAuthentication”。看看这是否有帮助。

    【讨论】:

      【解决方案2】:

      假设您获得的不记名令牌是有效的并且符合您的期望(您始终可以decode 它查看其声明),那么您需要提供有关您正在调用的特定服务的更多详细信息。服务可能需要 2FA 或具有您的不记名令牌不满足的其他身份验证强度策略,因此重定向以继续身份验证。

      【讨论】:

        猜你喜欢
        • 2019-01-24
        • 2019-10-26
        • 2020-06-08
        • 2020-08-10
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 2023-03-03
        • 2015-08-11
        相关资源
        最近更新 更多