在 Azure 应用服务身份验证与身份验证(经典)中重定向以使用 AAD 登录

Posted

技术标签:

【中文标题】在 Azure 应用服务身份验证与身份验证(经典)中重定向以使用 AAD 登录【英文标题】:Redirect to login with AAD in Azure App Service Authentication vs Authentication (Classic) 【发布时间】:2021-08-24 23:21:38 【问题描述】:

我正在尝试设置一个系统,其中 Azure DataFactory 可以通过其托管标识调用 Azure 函数。很好的例子:Authorising Azure Function App Http endpoint from Data Factory

但是,这是使用用于 Azure 功能的旧(er)身份验证/授权工具,现在已重命名为身份验证(经典)。通过这个设置系统很好,我可以拨打电话并得到响应,但是升级到授权会导致这个中断。似乎缺少的关键是“请求未通过身份验证时采取的操作”选项,我似乎无法使用新的授权工具进行设置,但应设置为“使用 Azure AD 登录”

总之,我如何使用新的授权工具设置此设置,以便 MSI 可以对该功能进行冷却并通过 AAD 进行身份验证。

经典图片

具有新授权的图像(无法重定向到 AAD)

总之,我如何使用新的授权工具设置此设置,以便 MSI 可以对该功能进行冷却并通过 AAD 进行身份验证。

【问题讨论】:

这里可能有两种身份验证方法:委托(登录流程)和应用程序(后端服务流程)。对于您的场景,客户端凭据(后端服务)是最佳选择。 【参考方案1】:

要使其与新的 Authentication 一起使用,请按照以下步骤操作。

1.在门户中编辑Authentication settings或在创建应用时进行如下设置。

2.编辑Identity provider,确保Issuer URLhttps://sts.windows.net/<tenant-id>没有/v2.0)并且Allowed token audiences包括App ID URI

App ID URI,你可以在你的函数应用的AD App中查看->Expose an API,如果你之前使用旧的Authentication,可能是你的函数应用URL,没关系,只是确保 Allowed token audiences 包含它。

3.然后在datafactory web Activity中,还要确保资源是App ID URI

然后就可以正常使用了。

更新:

你可以参考我的配置。

功能应用:

广告应用:

AD 应用清单:


    "id": "xxxxxx",
    "acceptMappedClaims": null,
    "accessTokenAcceptedVersion": null,
    "addIns": [],
    "allowPublicClient": null,
    "appId": "xxxxx",
    "appRoles": [],
    "oauth2AllowUrlPathMatching": false,
    "createdDateTime": "2021-06-08T01:51:06Z",
    "disabledByMicrosoftStatus": null,
    "groupMembershipClaims": null,
    "identifierUris": [
        "api://xxxxx"
    ],
    "informationalUrls": 
        "termsOfService": null,
        "support": null,
        "privacy": null,
        "marketing": null
    ,
    "keyCredentials": [],
    "knownClientApplications": [],
    "logoUrl": null,
    "logoutUrl": null,
    "name": "joyfuna2",
    "oauth2AllowIdTokenImplicitFlow": true,
    "oauth2AllowImplicitFlow": false,
    "oauth2Permissions": [
        
            "adminConsentDescription": "Allow the application to access joyfuna2 on behalf of the signed-in user.",
            "adminConsentDisplayName": "Access joyfuna2",
            "id": "1704f162-421d-4733-855f-5d93c0c55689",
            "isEnabled": true,
            "lang": null,
            "origin": "Application",
            "type": "User",
            "userConsentDescription": "Allow the application to access joyfuna2 on your behalf.",
            "userConsentDisplayName": "Access joyfuna2",
            "value": "user_impersonation"
        
    ],
    "oauth2RequirePostResponse": false,
    "optionalClaims": null,
    "orgRestrictions": [],
    "parentalControlSettings": 
        "countriesBlockedForMinors": [],
        "legalAgeGroupRule": "Allow"
    ,
    "passwordCredentials": [
        
            "customKeyIdentifier": null,
            "endDate": "2031-06-08T01:51:05.573Z",
            "keyId": "c6d4434f-7aaf-4c4c-9428-a38cbf8200bb",
            "startDate": "2021-06-08T01:51:05.573Z",
            "value": null,
            "createdOn": "2021-06-08T01:51:07.3876164Z",
            "hint": "UT_",
            "displayName": "Generated by App Service"
        
    ],
    "preAuthorizedApplications": [],
    "publisherDomain": "xxxxxx.onmicrosoft.com",
    "replyUrlsWithType": [
        
            "url": "https://joyfuna2.azurewebsites.net/.auth/login/aad/callback",
            "type": "Web"
        
    ],
    "requiredResourceAccess": [
        
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                
            ]
        
    ],
    "samlMetadataUrl": null,
    "signInUrl": "https://joyfuna2.azurewebsites.net",
    "signInAudience": "AzureADMyOrg",
    "tags": [],
    "tokenEncryptionKeyId": null

Datafactory 网络活动:

【讨论】:

嗨乔伊,感谢您的回复。不幸的是,这仍然不起作用,我在 ADF 中遇到错误,提示“观众验证失败,观众不匹配”。我已将参数设置为您建议的参数,包括在颁发者 URL 中删除 v2.0。是否有任何其他设置可能导致此问题? @Aegir 您是否使用其他任何东西来保护您的功能,例如APIM ? 不,它只是一个使用 Azure 提供的 HttpTrigger 模板的基本 Python 函数。通过浏览器调用可以让我得到响应。身份提供者设置: ID 提供者:MS。支持的帐户类型:当前租户-单租户颁发者 URL:sts.windows.net/<tenant_ID> 允许的令牌受众:api:// ADF 身份是否需要在 RG 上具有任何其他 RBAC 角色?似乎不太可能,但目前愿意尝试任何事情 好的,全新的应用服务似乎可以工作了。也许这是从经典升级到新的过程中的一个问题,或者是我不小心调整的其他问题。非常感谢您的时间和帮助,我很感激

以上是关于在 Azure 应用服务身份验证与身份验证(经典)中重定向以使用 AAD 登录的主要内容,如果未能解决你的问题,请参考以下文章

用于管理实用程序的 Azure 身份验证

对 Azure 应用服务的逻辑应用身份验证

Azure 身份验证 ID 不稳定

无法让 OpenID 身份验证与 Onelogin 和 Azure Web 应用程序一起使用

Azure API 管理 - 与底层服务进行身份验证和授权同步

Azure 应用服务中的 LDAP 身份验证失败