问题标签 [easy-auth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
323 浏览

authentication - 启用身份验证的 Azure 应用服务在注销后使用以前的凭据静默登录

我有一个 Azure 应用服务身份验证/授权配置为使用 Microsoft 登录(又名 Easy Auth)。一切都很好。但是我对注销行为感到困惑。如果我去,myapp/.auth/logout我肯定会注销,因为我不再看到X-MS-CLIENT...请求的标题。

然后我去,/.auth/login/microsoftaccount但不是提示输入凭据,而是自动使用以前的帐户登录。很多时候都很好,但我正在尝试测试具有不同权限的用户。如果我启动一个新的私人浏览器,每次都会按预期提示我。

我一定在注销或登录参数时错过了某些东西以启用重新提示。有人可以帮助我了解我在这里错过了什么吗?

Easy Auth 文档 https://docs.microsoft.com/en-us/azure/app-service/overview-authentication-authorization

0 投票
1 回答
95 浏览

azure - 在不同的 azure 活动目录中为多个 Web api 使用一个客户端应用程序

我有一个客户端 Web 应用程序和一个在“AADirectory1”应用程序注册中注册的 Web api 应用程序为了从客户端使用 Web api,我做了:

  1. WEB API App注册中暴露的API
  2. 为客户端应用程序添加了与我的 WEB API 相关的 API 权限
  3. 为我的 Web 客户端配置了应用程序服务(App Services->Authentication / Authorization->Azure Active Directory并将客户端 ID 和颁发者 URL 填写为https://sts.windows.net/

现在我在 AADirectory2 中有 WEB API2。我不想在 AADirectory2 中为 Web 客户端应用程序创建新的应用程序注册。相反,我想使用当前的 Web 客户端应用程序(在 AADirectory1 中)。问题是我不知道如何设置我的 Web 客户端以便能够从 Web 客户端活动目录 (AADirectory1) 调用 webapi1 (AADirectory1) 和 web api2 (AADirectory2)。

0 投票
1 回答
446 浏览

function - 有没有办法以编程方式为 Azure Function App 的 AAD 配置 azure EasyAuth?

我正在编写 Azure CLI 脚本来自动在 Microsoft Azure 中创建云端组件。特别是,我使用 CLI 创建 Azure Function Apps。但是,虽然我能够使用 CLI 创建函数应用程序,但我无法确定一种方法来配置针对 Azure Active Directory 的身份验证,除了使用 Azure 门户用户界面(请参阅https://docs.microsoft .com/en-us/azure/app-service/configure-authentication-provider-aad了解交互过程的描述)。

很明显,交互过程在幕后执行了几个步骤,包括创建 AAD 应用程序注册并将注册与函数应用程序相关联。我的问题是:

  1. 执行步骤的详细信息是什么?
  2. 是否有使用 CLI 或其他接口的编程方式来执行相同的步骤集?
0 投票
1 回答
3734 浏览

oauth - 如何使用 OAuth 为人和机器保护 Azure 功能?

我有一个天蓝色的功能应用程序,机器(客户端凭据流)和人类(授权代码流)都需要能够授权/验证。

最初,我使用 easy-auth、Azures 开箱即用的解决方案来保护功能应用程序。但是,根据此https://stackoverflow.com/a/57357226/7411328,无法通过简单的身份验证使用客户端凭据流。虽然我不明白这是为什么。为什么不能通过一个应用程序注册对两个不同的流程使用相同的权限?

假设(可能不正确)以上是正确的,我必须自己实现 JWT 验证。

有没有可靠的方法来判断 API 是由机器调用还是由人调用?

我还应该使用两个单独的应用程序注册吗?

我对这些技术的理解可能不足以正确提出这个问题,如果我能做些什么来澄清这个问题,请告诉我。

0 投票
1 回答
1911 浏览

azure - 从静态文件 SPA 调用 Azure Function App

回答: 对于任何寻找此答案的人,我可以通过在 MSAL 获取令牌调用范围内指定 Web API 来获得所需的令牌,如下所示:

完成此操作后,我将令牌用作身份验证标头中的承载令牌。除了调用 MS Graph 端点外,我还可以使用它。我在这里一个安静的小地方找到了这些信息:

https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-acquire-cache-tokens#request-specific-scopes-for-a-web-api

非常感谢@StanleyGong 的帮助,最终得到了答案。

/////

过去几天,我一直在寻找如何有效地保护从 Azure Web 应用调用到 Azure Function App 提供的 Vue SPA。我为 Web 应用程序和函数应用程序都打开了 Easy Auth,并且我正在调用/.auth/me端点以获取一个 id 令牌,我读过它可以用作不记名令牌。所以我正在做的是调用/.auth/me并使用返回的来创建一个 Authorization 标头,但是在调用函数应用程序时id_token我仍然得到一个。401 Unauthorized

从 /.auth/me 获取 id_token 并将其作为默认标头添加到所有 Axios 调用的代码(我确实认识到这将需要刷新......我将在接到一个电话后创建所有这些逻辑在职的):

我可以看到请求的 Authorization 标头中使用的令牌,紧跟上面的部分:

我看到了这篇文章并尝试使用其中的一些信息,包括 Chris Gillum 的博客文章(很有帮助,但仍然没有让我到达那里):Azure Functions 的身份验证

关于如何使它工作的任何建议?我觉得我很接近,但我并不完全在那里。如果这不是正确的方法,那么任何建议也会有所帮助。

总的来说,我在身份方面非常缺乏经验,所以我一直在使用术语,这并没有因为文档的不一致而有所帮助。

另外,有没有什么方法可以测试这些东西,而无需在每次更改时都部署代码?通过以某种方式从商店获取令牌而不将代码放在网络应用程序服务器上来测试这一点会很棒......我猜是一厢情愿的想法,但只是想知道。

编辑:我刚刚意识到我读过的所有帖子都表明访问令牌是从返回的,/.auth/me但我没有得到。返回的 JSON 如下所示,仅此而已:

另一个编辑:我发现我可以使用 MSAL 获取令牌,但它包含的信息与/.auth/me. 使用任一令牌作为不记名令牌仍会导致 401。我确实注意到在应用程序的 AAD 身份验证设置中,颁发者 URL 不同。一个是 sts.windows.net,另一个是 login.windows.net。两人后面都有租户 ID。不确定这是否有所作为,但我尝试将它们设置为相同的值,但没有帮助。

/.auth/me令牌(当然是经过消毒的):

MSAL 访问令牌:

0 投票
1 回答
597 浏览

azure - 如何将 Easy Auth 与 .NET Core 3.1 MVC App 集成?

我正在开发一个 .NET Core 3.1 MVC 应用程序,然后将其发布到 Azure Web 应用程序。在 Azure 门户中,对于此托管应用程序 -> 我启用了使用 AzureAD 登录的应用程序服务身份验证。但是随后身份验证不起作用,因为“User.Identity.IsAuthenticated”在控制器中始终为假,我无法获取我想要的其他用户详细信息,如电子邮件等。搜索后我发现有一种解决方法>Net Core 2.2 ( https://github.com/MaximRouiller/MaximeRouiller.Azure.AppService.EasyAuth )的 Nuget 包,但我没有看到 3.1 的任何解决方案。

但是,当我通过禁用 Azure 中的应用服务身份验证来设置自定义身份验证时,并在 Startup.cs 中设置身份验证,如下所示:

和这个:

使用 appsettings.json 中的配置,身份验证工作正常,我也可以获取用户详细信息。

但是我们首选的解决方案是在代码中没有任何身份验证设置/自定义身份验证,而是使用带有 .NET Core 3.1 MVC 应用程序的 Azure AD Easy Auth 在门户上完全处理它。非常感谢任何帮助。

0 投票
1 回答
115 浏览

azure - 在 Azure 应用服务身份验证 (EasyAuth) 中缓存令牌

我正在使用内置身份验证的 azure app 服务将用户登录到我的 Web 应用程序。由于我有一些用户无需身份验证即可访问的页面,因此我在应用服务身份验证配置中允许匿名访问。

它按当前会话的预期工作。但是当用户关闭浏览器或打开一个新窗口时,身份验证就会丢失。用户需要重新登录。

有没有办法让用户保持登录状态?

我目前在做什么:

单击登录按钮时,将用户定向到 /.auth/login/microsoftaccount,成功登录后我调用 ./auth/me 以获取用户声明/详细信息,然后登录用户。然后我向https://appname.azurewebsites.net/.auth/login/microsoftaccount发了一个 http 帖子,以验证我从 /.auth/me 获得的令牌,并且我还从这个帖子请求中获得了一个会话令牌(我不知道有什么用)。

我使用应用服务设置的自定义标头在后端进行身份验证。应用服务认证文档

这是使用应用服务进行身份验证的正确方法吗?如果是这样,有什么方法可以让用户保持登录到应用服务身份验证,而不是在每次打开网站时都要求他们签名。

有没有办法缓存令牌?

0 投票
1 回答
1360 浏览

azure - 使用 MSAL.NET 获取不记名令牌以使用 EasyAuth 访问应用服务

我有一个使用 Azure AD EasyAuth 进行身份验证的 Azure 应用服务。 使用 AD 配置 AppService

使用 AD 2 配置 AppService

我正在尝试使用 C# 和 MSAL.NET (Microsoft.Identity.Client) 从另一个应用服务发送请求。

验证码如下所示

我成功获得了不记名令牌,但是当我尝试使用注入标头的令牌调用应用服务时,我得到 401 和You do not have permission to view this directory or page.:(

更新1:

我尝试了@Jim Xu 的回答,它仍然给我 401。它返回一个www-authenticate具有以下值的标题 www-验证值

资源id与App Reg中的ClientId相同

更新 2 - 解决方案

所以总结一下修复:

  1. 调用时请求的范围AcquireTokenForClient应包括{Application ID Uri}/.default
  2. 在 EasyAuth 配置中,Allowed Token Audiences也需要设置Application ID Uri
0 投票
0 回答
154 浏览

azure - Azure AD B2C 与适用于 Kubernetes 的 EasyAuth

我们在 Kubernetes 的 SPA 中使用带有自定义策略的 Azure AD B2C,并且已经看到 EasyAuth 也可以在带有 Azure AD 的 Kubernetes 中使用 ( https://github.com/Azure/EasyAuthForK8s )。该页面还显示“复杂身份流的 Azure AD B2C 自定义策略”包括在内。这是否意味着我可以在 Kubernetes 中包含 EasyAuth 并将其添加到我的登录和注册策略中,还是 Azure AD B2C 自己处理?如果我可以将其包含在我的政策中,是否有任何示例?不幸的是,我还没有找到任何关于此的内容。

感谢您的回答

0 投票
1 回答
152 浏览

azure-active-directory - EasyAuth 与不同主机上的 SPA 和 AzureFunction

我正在尝试将 EasyAuth (aad) 与目前位于“localhost:8080”上的 SPA 以及托管在 Azure 中的 Azure Function ({function-app}.azurewebsites.net。目的是为了SPA 调用 Azure 函数上的安全端点。因此,我将 Azure 函数注册为 AD 中的应用程序,并且 SPA 中的身份验证重定向到 Azure 函数 EasyAuth 端点似乎正在工作,但重定向回post_login_redirect_url不是通过 localhost SPA 。

我将http://localhost:8080作为允许的重定向 URI 添加到 AAD 注册应用程序中。但是,如果我完全限定了我被重定向回的 URL {function-host}/.auth/login/done。是否期望 SPA 在与 azure 函数相同的主机名下运行,或者有没有办法配置设置以允许 SPA 主机的任何 URL?

行为

就行为期间的 HTTP 数据而言,一旦登录成功.auth/login/aad/callback,在重定向到默认完成页面并停止之前加载以下内容。

  • 响应头
    • Location= {function-host} /.auth/login/done
  • 表格数据:
    • state= http://localhost:8080
    • code= 授权码
    • id_token= 授权令牌

我如何从 SPA 中调用它