使用 AAD 和 Azure 函数 returns 未经授权的简单身份验证隐式流程
Easy Auth Implicit Flow with AAD and Azure Function returns Unauthorized
API 复制
我在 azure 门户中创建了一个简单的 azure 函数应用程序,并使用 http 绑定函数。函数只是 returns 字符串 "Hello from secured API"。
平台功能的下一步我selected Authentication/Authorization。我打开了应用程序服务身份验证。我select编辑了在请求未通过身份验证时要采取的操作:使用 AAD 登录。选择 AAD 作为我的提供者并配置为快速模式(默认目录),并为新的 Active Directory 应用程序selected {name}。
我还添加到 CORS 策略地址:http://localhost:8080,其中我的 Vue.js 客户端应用程序是 运行。
完成这些操作后,我在我的 AAD 中注册了已定义 user_impersonation 范围的应用程序。 AD 应用程序已经配置了重定向 URI:https://{name}.azurewebsites.net/.auth/login/aad/callback,检查了 Web 平台上隐式授权的 Id 令牌。我想将支持的帐户类型更改为多租户,但由于某些错误我不能。
在 Expose Api 部分,我将 App Id Uri 从 https://{name}.azurewebsites.net 更改为 api://{app id}为了选择多租户支持的客户端类型。已经定义了 user_impersonation 个范围。
客户端重现
我在 Web 平台上使用重定向 uri http://localhost:8080/ 和 select id 和访问令牌在隐式授予部分注册了我的应用程序.我选择了多租户帐户类型。
我为我的 API 添加了 api 权限(azure 函数) api://{api app id }/user_impersonation
我在 vue.app 中使用 MSAL.JS。我在那里完成了所有工作。得到弹出窗口,给了我的登录名和密码。
我在我的 vue.js 客户端应用程序中收到了来自身份提供商 (AAD) 的 ID 令牌和访问令牌。
我正在使用授权 header 承载 {access_token} 向我的 API(azure 函数)发送请求。
问题
我的 API 请求未经授权。我得到状态 401:
POST https://{azure func name}.azurewebsites.net/api/HttpTrigger1?code={code}== 401 (Unauthorized)
Http 地址是从 Azure 门户复制的。
当我点击 link 时,我被重定向到登录,然后被重定向到 azure 函数,在 brwoser 选项卡中使用我的 "Hello from secured API" 文本。
我似乎 Easy auth 将我的 azure 函数视为客户端应用程序,我是否希望它成为我的 vue.js 应用程序的中间件 APi。我的 Azure 函数 API 应该只接收和验证访问令牌。
尝试过
我也尝试用令牌向邮递员发送请求,但也收到了未经授权的请求。
我探索了令牌,它似乎是正确的:
"aud": "api://{Azure function App Id (id in AAD)}",
"iss": "https://sts.windows.net/{tenant id}/",
"appid": "{registered vue js client app id (id in AAD)}",
要解决这个问题,我必须转到我的 Azure Function App 平台功能中的 Authentication/Authorization 部分。在身份验证提供程序 select AAD -> 高级下,添加允许的令牌受众:api://{Azure Function AD App Id}。
问题是我的令牌是为其他观众准备的:https://{func name}.azurewebsites.net
。这是由于更改了我的 AF AD 应用程序 ID:
"In Expose Api section I changed App Id Uri from
https://{name}.azurewebsites.net to api://{app id} in order to choose
multitenant supported client types. There already has been
user_impersonation scope defined."
此操作还更改了作用域名称。
API 复制
我在 azure 门户中创建了一个简单的 azure 函数应用程序,并使用 http 绑定函数。函数只是 returns 字符串 "Hello from secured API"。
平台功能的下一步我selected Authentication/Authorization。我打开了应用程序服务身份验证。我select编辑了在请求未通过身份验证时要采取的操作:使用 AAD 登录。选择 AAD 作为我的提供者并配置为快速模式(默认目录),并为新的 Active Directory 应用程序selected {name}。
我还添加到 CORS 策略地址:http://localhost:8080,其中我的 Vue.js 客户端应用程序是 运行。
完成这些操作后,我在我的 AAD 中注册了已定义 user_impersonation 范围的应用程序。 AD 应用程序已经配置了重定向 URI:https://{name}.azurewebsites.net/.auth/login/aad/callback,检查了 Web 平台上隐式授权的 Id 令牌。我想将支持的帐户类型更改为多租户,但由于某些错误我不能。
在 Expose Api 部分,我将 App Id Uri 从 https://{name}.azurewebsites.net 更改为 api://{app id}为了选择多租户支持的客户端类型。已经定义了 user_impersonation 个范围。
客户端重现
我在 Web 平台上使用重定向 uri http://localhost:8080/ 和 select id 和访问令牌在隐式授予部分注册了我的应用程序.我选择了多租户帐户类型。
我为我的 API 添加了 api 权限(azure 函数) api://{api app id }/user_impersonation
我在 vue.app 中使用 MSAL.JS。我在那里完成了所有工作。得到弹出窗口,给了我的登录名和密码。
我在我的 vue.js 客户端应用程序中收到了来自身份提供商 (AAD) 的 ID 令牌和访问令牌。
我正在使用授权 header 承载 {access_token} 向我的 API(azure 函数)发送请求。
问题
我的 API 请求未经授权。我得到状态 401:
POST https://{azure func name}.azurewebsites.net/api/HttpTrigger1?code={code}== 401 (Unauthorized)
Http 地址是从 Azure 门户复制的。
当我点击 link 时,我被重定向到登录,然后被重定向到 azure 函数,在 brwoser 选项卡中使用我的 "Hello from secured API" 文本。
我似乎 Easy auth 将我的 azure 函数视为客户端应用程序,我是否希望它成为我的 vue.js 应用程序的中间件 APi。我的 Azure 函数 API 应该只接收和验证访问令牌。
尝试过
我也尝试用令牌向邮递员发送请求,但也收到了未经授权的请求。
我探索了令牌,它似乎是正确的:
"aud": "api://{Azure function App Id (id in AAD)}",
"iss": "https://sts.windows.net/{tenant id}/",
"appid": "{registered vue js client app id (id in AAD)}",
要解决这个问题,我必须转到我的 Azure Function App 平台功能中的 Authentication/Authorization 部分。在身份验证提供程序 select AAD -> 高级下,添加允许的令牌受众:api://{Azure Function AD App Id}。
问题是我的令牌是为其他观众准备的:https://{func name}.azurewebsites.net
。这是由于更改了我的 AF AD 应用程序 ID:
"In Expose Api section I changed App Id Uri from https://{name}.azurewebsites.net to api://{app id} in order to choose multitenant supported client types. There already has been user_impersonation scope defined."
此操作还更改了作用域名称。