[玩转系统] Azure Functions 和 Azure AD 身份验证
作者:精品下载站 日期:2024-12-14 07:14:00 浏览:13 分类:玩电脑
Azure Functions 和 Azure AD 身份验证
这篇文章是有关 Azure Functions 和 PowerShell 的系列文章的一部分。查看该系列中其他帖子的列表!
Azure Functions 和 Azure AD 身份验证
Azure Functions 简单、便宜且可扩展。
PowerShell 是一种功能强大的语言,非常适合自动化和编写将系统“粘合”在一起的集成。
这对我来说是天作之合,但我如何知道并验证谁调用了我的代码?这就是身份验证发挥作用的地方。身份验证就是验证谁连接到我的应用程序,以便我(或我的代码)可以确定他们是否应该被授权这样做。
要求 Azure AD 用户登录 Azure Functions
让我们从简单开始吧。我希望用户在调用我的函数时使用 AzureAD 进行身份验证。
这个场景实际上非常简单,因为它是 Azure Functions 中包含的一项功能,或者公平地说,它包含在构建 Functions 的 Azure 应用服务中。此功能可以在两种管理模式(快速或高级)中的一种中启用。因为我喜欢真正了解事物是如何运作的,所以我将涵盖它们。
我们为此使用的功能曾经称为 easyauth。搜索 Azure 应用服务和 easyauth 或“easy auth”可能会为您提供一些有价值的信息。
选择快速模式和高级模式进行身份验证
与大多数其他情况一样,做事有一种简单的方法,也有一种不太简单的方法。在这种情况下,最简单的方法称为“快速”模式。引用鼠标悬停的解释:
“快速模式将使用您的默认 AAD,并可以为您创建 AAD 应用程序。如果您想要自定义 AAD 配置,请选择高级模式”
快速模式可以在几秒钟内完成设置,并且适用于大多数简单的场景,但您只能设置一次,而且我经常会遇到这样的情况:我想稍后更改内容,这在使用快速模式时有点困难。
您还需要注意快速模式的另一个缺点。截至 2020 年 10 月撰写本文时,快速模式设置了 Azure AD V1 应用程序。如果我们想使用较新的 V2 端点,我们需要使用高级模式。 Microsoft 建议对新项目使用 V2 终结点。查看为什么更新到 Microsoft Identity Platform (v2.0) 以了解更多信息。
Active Directory 身份验证快速模式
在这种情况下,我假设我们有一个正在运行的 Function App,并且允许执行这些步骤的用户在 Azure Active Directory 中注册应用程序。
首先转到“身份验证/授权”边栏选项卡。
正如警告文本告诉我们的,我们需要按顺序进行 SSL 配置,使用 .NET 版本 4.5 或更高版本,并将管理管道模式设置为“集成”。由于这是新功能应用程序的默认设置,因此我不会在这里详细介绍。
打开应用服务身份验证,将下拉列表“请求未经身份验证时采取的操作”设置为“使用 Azure Active Directory 登录”。这会将任何未经身份验证的请求重定向到登录提示。
在“身份验证提供程序”下,单击“Azure Active Directory”。
进入 Azure Active Directory 设置后,将管理模式从“关闭”更改为“快速”,为新应用程序选择一个好名称(它需要在租户中是唯一的),其余部分保持原样,然后单击“确定”。
返回身份验证/授权刀片后,不要忘记单击该保存按钮。
就这么简单!我们现在有一个需要 Azure AD 身份验证的功能!我们来尝试一下吧!
通过转到“函数”获取函数的 URL,选择一个函数(在我的例子中为“HttpTrigger1”),然后单击边栏选项卡顶部的“获取函数 Url”。
在网络浏览器中输入完整的功能 Url,您将被重定向到登录提示。如果这是您第一次登录此应用程序,您将收到同意请求。
如果您是租户中的应用程序管理员,您还会看到一个复选框,上面写着“代表您的组织同意”。只需单击“接受”即可仅接受当前用户。选中该框然后单击接受将为租户中的每个用户授予应用程序同意,即所谓的管理员同意。
为了根本不出现这个问题,我们可以在尝试登录之前授予管理员同意。这可以通过导航到 Azure Active Directory 和应用程序注册边栏选项卡在 Azure 门户中完成。选择“所有应用程序”选项卡,找到刚刚创建的应用程序,然后转到左侧菜单中的“API 权限”。在打开的新边栏选项卡中,我们可以看到应用程序需要将 User.Read 委托给 Graph API。要为组织中的所有用户批准此操作,只需单击“授予 的管理员同意”。
就是这样!
Active Directory 身份验证高级模式
如果以下任一陈述为真,您可能需要使用授权的高级设置。
- 我想使用新的 Microsoft 身份平台
- 我想使用在另一个 Azure AD 租户中注册的应用程序
- 我想要更好地控制和理解我所设置的内容
- 我无权自行创建应用程序,需要请别人为我创建应用程序
要使用高级设置设置授权,我们首先需要为 API 创建应用程序注册。
由于我不喜欢点击门户,所以我喜欢使用某种脚本来完成此操作。这次我将使用 PowerShell 中的 Azure CLI。更新显示名称和标识符 uri 以适合您的场景并运行脚本。
这个脚本做了一些事情。首先,我为我的应用程序配置显示名称和功能应用程序的名称。
然后,我收集应用程序获取有关登录用户的信息所需的一些访问权限。我这样做是为了我可以同意我的脚本中的所有这些权限,并且永远不必看到该同意对话框。
获得所有这些信息后,我们使用 az ad app create
创建应用程序,并使用 az ad sp create
创建服务主体。
然后我们为所有用户授予电子邮件、openid 和个人资料权限,这是同意部分。
最后,我们将 requestedAccessTokenVersion
设置为值 2。这会将清单中的值 accessTokenAcceptedVersion
设置为 2,并告诉 Azure AD 我们需要 V2 终结点令牌。现在,Azure CLI 目前使用的是不支持此功能的 Azure AD Graph API,因此我使用 az rest
来调用 Microsoft Graph 来执行此步骤。
$ServerAppDisplayName = 'MySuperAPI'
$SystemName = 'mycoolfunction'
# Get tenant id of current tenant
# (make sure to be signed in with az cli)
$TenantId = az account show --query 'tenantId' -o tsv
# Server app identifier, needs to be unique
# I'll default to an azure websites url
# Update to something that fits you
$ServerAppIdentifierUri = "https://$SystemName.azurewebsites.net"
# ReplyUris, this is where AzureAD will send the token.
# Make sure to get this right!
$ReplyUri = "https://$SystemName.azurewebsites.net/.auth/login/aad/callback"
# Create configuration for delegated permissions to graph API
# Get application id of Microsoft Graph
$GraphAppId = az ad sp list --query '[?appDisplayName==''Microsoft Graph''].appId' -o tsv --all
# Get all permissions available to graph
$Permissions = az ad sp show --id $GraphAppId --query 'oauth2Permissions' | ConvertFrom-Json
# Select the permissions we need
$EmailPermission = $Permissions.Where{ $_.value -eq 'email' }.id
$ProfilePermission = $Permissions.Where{ $_.value -eq 'profile' }.id
$OpenIdPermission = $Permissions.Where{ $_.value -eq 'openid' }.id
# Build part of a manifest for requiredResourceAccess
$requiredResourceAccess = @(
@{
resourceAppId = $GraphAppId
resourceAccess = @(
@{
id = $EmailPermission
type = 'Scope'
},
@{
id = $ProfilePermission
type = 'Scope'
},
@{
id = $OpenIdPermission
type = 'Scope'
}
)
}
) | ConvertTo-Json -AsArray -Depth 4 -Compress | ConvertTo-Json
# Pipe to ConvertTo-Json twice to escape all quotes, or az cli will remove them when parsing
# Register the application
$ServerApp = az ad app create --display-name $ServerAppDisplayName --identifier-uris $ServerAppIdentifierUri --required-resource-accesses $requiredResourceAccess --reply-urls $ReplyUri | ConvertFrom-Json
# Create a service principal for the application
$null = az ad sp create --id $ServerApp.AppId
# Consent the application for all users
$null = az ad app permission grant --id $ServerApp.AppId --api $GraphAppId --scope "email openid profile"
# Set application to use V2 access tokens
$Body = @{
api = @{
requestedAccessTokenVersion = 2
}
} | ConvertTo-Json -Compress | ConvertTo-Json
# Pipe to ConvertTo-Json twice to escape all quotes, or az cli will remove them when parsing
$null = az rest --method PATCH --uri "https://graph.microsoft.com/v1.0/applications/$($ServerApp.objectId)" --body $Body --headers "Content-Type=application/json"
# Output the ClientId for use later
Write-Output $ServerApp.AppId
就我而言,我得到的 AppId 为 c491d3f8-0d15-4ea5-96fd-957601d579fa
。这也称为我的应用程序的 clientId。我们稍后会需要这个,所以一定要把它写下来。
让我们转到 Azure 门户中的函数应用程序。导航到“身份验证/授权”边栏选项卡,选择“开”,使用“使用 Azure Active Directory 登录”操作,然后单击“Azure Active Directory”,就像我们在“快速模式”中所做的那样。
这次我们将选择“高级”而不是“快速”。在这里,我们需要输入上面注册的 ClientId (AppId) 以及颁发者 URL。颁发者 Url 包含以下部分:“//v2.0”,其中全局 Azure 中的 Azure AD 身份验证终结点为 https://login.microsoftonline.com。对于其他云,请检查 Azure AD 身份验证终结点。您可以在门户中获取租户 ID,也可以通过运行 az account show
或使用 PowerShell 命令 Get-AzContext
来获取。
现在我们应该能够浏览到我们的函数,重定向到登录页面,然后到达我们的函数。就那么简单!
验证结论
总而言之,如果您准备花几分钟而不是几秒钟来配置身份验证,那么走所谓的高级路线是非常值得的!
正如我们在上面所看到的,要获取访问令牌,我们需要在 Azure AD 中注册一个应用程序。到目前为止,我们创建的应用程序旨在充当 Web 服务器应用程序。这意味着当用户登录时,令牌颁发者(在本例中为 Azure AD)不会将访问令牌返回给客户端,Azure AD 会将其发送到客户端指定的重定向 URI。 Azure AD 将仅接受我们的应用程序注册中列出的重定向 URI。这意味着仅添加正确的重定向URI 极其重要。
在上面的高级场景中,我们将此重定向 URI 设置为我们的函数 URI,后跟“/.auth/login/aad/callback”。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag