问题标签 [microsoft-identity-web]

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 回答
55 浏览

reactjs - 在 Azure AppService 中为 React(Client-App) 和 .Net Core(API's) 集成 AAD

我在 ReactJs 中开发了一个客户端应用程序,它托管在 1AppService 中,并且我将 .netcore webapi 托管在另一个应用程序服务中

我们可以从 AppService 的身份验证刀片集成 Azure Active Directory,而无需对 react 和 .net proj 的代码级别进行任何更改。或者应该在 React 中下载 MSAL 包并实现它。

注意-我已经使用MSAL包及其工作实现了具有相同架构(React 和 .Net)的 B2C。我们可以在不更改代码的情况下使用 Appservice 中的身份验证刀片来实现相同的目标吗 在此处输入图像描述

0 投票
0 回答
22 浏览

asp.net-core - Microsoft.AspNetCore.Authentication 持有者令牌在身份验证后添加角色

我正在从使用Microsoft.Owin.Security.ActiveDirectory库对承载令牌进行身份验证的 .NET Framework 应用程序迁移到使用这些Microsoft.AspNetCore.Authentication库的 .NET 5。

我的旧代码如下:

然后我实现了一个OAuthBererAuthenticationProvider向用户附加声明的方法。

我的新代码如下:

这可以验证传递给 API 的令牌。但是,没有附加任何角色。如何修改此配置以便附加我的用户角色?

0 投票
1 回答
80 浏览

asp.net-core - 即使在挑战中指定不同的方案时,也会在我的 AuthenticationHandler 中调用 HandleChallengeAsync

我在启动时注册我的身份验证方案

我的自定义身份验证处理程序还没有做太多

当使用带有指定方案的 Authorize 属性时,一切正常。我只希望在这样指定方案时使用我的 Auth 处理程序。

我创建了一个控制器动作来强制 Oidc 挑战。

问题是,当我导航到 时Account/SignInOidcHandleAuthenticateAsync()在我的自定义 AuthenticationHandler 中调用。即使我正在返回AuthenticateResult.NoResult(),该HandleChallengeAsync()方法仍然被调用。

这导致我的页面重定向到我的自定义登录页面,而不是重定向到 Oidc 提供程序。

当针对不同方案调用质询时,有没有办法告诉我的处理程序不要进行重定向?

0 投票
1 回答
180 浏览

asp.net-core - ASP.NET Core 5:OpenIDConnect 打破默认/根路由

我有一个 ASP.NET Core 5 MVC 应用程序,其中默认/根路由设置如下PageController

在我添加 OpenIdConnect 身份验证之前,这一直很好。之后,根 ( /) 页面不再路由到__HomePageController,它只是返回一个空白页面。所有其他页面路由都很好。

当我注释掉这个时:

然后/再次工作,所以我知道这与身份验证有关。如您所见,我已添加[AllowAnonymous]到该操作中。

我的启动中有这个:

有想法该怎么解决这个吗?我知道在这样的奇怪控制器/动作中使用默认/根路由是非常规的,但这是有原因的,所以我希望它仍然可以工作。

更多信息:

我发现如果我移到app.UseEndpoints上面app.UseAuthentication,那么主页就会显示。然而,在登录(使用 B2C)后,它进入了一个无限循环(即身份验证令牌不粘?)。

编辑:我的 Startup.cs 类

编辑 2

我认为这是破坏/返回空白页,因为当我在主页上获得某些app.UseAuthentication()内容之前放置以下代码时,如果它之后则为空白:app.UseAuthentication()

所以也许它与我的身份验证有关?这是我的appsettings.json

0 投票
0 回答
346 浏览

c# - 如何使用 Graph 和 Microsoft Identity Web 为我的 API 授予应用程序和委托权限

问题陈述

我正在编写一个需要访问用户不一定有权访问的 OneDrive 组的应用程序。这(对我而言)意味着我需要使用应用程序权限,特别是“Sites.Selected”。然而,应用程序应该仍然能够代表用户做事。

我试图将应用程序权限保持在尽可能低的水平,以使 API 更加安全,因此如果我可以同时使用委托权限和应用程序权限,那就太好了。

我做了什么

根据我在这里阅读的内容,似乎我需要两个单独的 Graph Client 实例并为每个实例获取一个令牌。不过,这些帖子来自 2018 年,从那时起情况发生了很大变化。据此,似乎有可能拥有一个图形实例并使用 .WithAppOnly() 和 .WithScopes() 您可以告诉 Graph 女巫使用权限。

我目前正在将 Microsoft.Identity.Web 和 .AddMicrosoftGraph 与 .WithAppOnly 和 .WithScopes 一起使用,但我仍然无法使用应用程序权限。.WithScopes 函数正在运行,但在尝试使用 .WithAppOnly 时出现以下错误:

Azure 应用权限

在此处输入图像描述

SharePoint 权限检查结果

}

代码

启动.cs

应用设置.json

Graph Call 在没有 .WithAppOnly 的情况下工作正常,但它仍在使用用户对 Graph 客户端进行身份验证(如果用户无权访问驱动器,则调用失败)

0 投票
1 回答
148 浏览

asp.net-core - 重新启动应用程序时,ASP.NET Core 3.1 Microsoft Graph 访问令牌丢失

使用ASP.NET Core 3.1and Microsoft Graph API,当应用程序重新启动时Access Token会丢失。用户仍处于登录状态,但无法执行任何Graph API呼叫。

我已经尝试过这里提到的建议管理增量同意和条件访问,但无法刷新令牌并自动恢复。

这是我的控制器:

在上面的代码中,当应用程序重新启动时,访问令牌会丢失,重新抛出异常会导致重定向到登录页面。

如果我然后单击该Sign-in with Microsoft按钮,则用户已经登录,无需输入凭据。如果我随后访问调用 的控制器Graph API,则 API 调用成功。

如何在调用 API 之前刷新令牌?

另外我该如何调试呢?如果我在它没有用处设置断点throw ex.MsalUiRequiredException;,我看不到重定向从哪里获取它的值。

0 投票
1 回答
136 浏览

.net - 如何在不退出 Microsoft 帐户的情况下退出 Blazor Web 应用程序

我有一个 blazor 服务器端应用程序,它使用 Microsoft 身份平台的身份验证 - 单一组织。我正在使用 Microsoft.Identity.Web 1.16.0 和 Microsoft.Identity.Web.UI 1.16.0 包。当我单击链接注销时,我只想从浏览器中清除用户的会话,而不是重定向用户以注销身份提供者。

目前该链接指向 href="MicrosoftIdentity/Account/SignOut"。

它把我带到一个页面,上面写着“你想退出哪个帐户?”,但如果我回到浏览器上的上一页,它似乎已经清除了用户会话。

0 投票
0 回答
147 浏览

c# - 使用 BFF 注销时是否需要 Microsoft Identity Web UI?

我的应用程序正在使用 Microsoft Identity Web,并且是 BFF。(后端换前端)。它服务于 SPA,负责对真实 API 的身份验证和代理 API 调用。身份验证存储在 cookie 中。这样,SPA 不需要任何身份验证,除了类似api/users/me调用以确定用户是谁的调用。您甚至无法访问 HTML/CSS/JS,因为在您访问它之前,SPA 会将您重定向到 Microsoft 登录。

这在文档或示例中并没有真正涵盖,所以我想知道以下内容。我的注销当前是否正确实施?

请查看我的代码和以下有关它的问题。请注意,类似的东西AddMicrosoftIdentityUi()已添加到我的代码库中,但未在代码中添加以保持简短(呃)。

授权设置:

登出:

  • 我的注销是否足够好,还是应该在/microsoftidentity/account/signout路径上使用 SignOut?考虑到我使用自定义 cookie 身份验证设置。
  • 如果是这样,我可以改变这条路吗?如果这不能轻易做到,那不是什么大问题。
  • 为什么 SignOut 是 GET 请求?此线程中的大多数人建议使用 POST。为什么选择 GET?
  • 如果我的注销就足够了,我还需要 UI 包吗?
0 投票
0 回答
107 浏览

c# - 将 SameSiteLax 与 Microsoft Identity Web Web App 与 Azure AD 登录一起使用时的 Safari 无限循环

这与我之前提出的这个问题有关。可悲的是,我仍然有这个问题。

我的问题如下:

  • 使用 2 个帐户登录 Microsoft。例如,转到 Azure 门户并使用 1 个帐户登录,然后使用另一个帐户登录。
  • 转到我的应用程序。选择您要登录的帐户,因为您可以选择 2 个不同的帐户。您立即登录。
  • 登出。您必须选择要注销的帐户。不管是哪一个。
  • 您现在处于无限重定向循环中,直到 MS 登录屏幕道歉它无法让您登录。
  • 如果你现在去我的网络应用程序,你已经登录了。所以不知何故设置了 cookie,只是重定向似乎失败​​了?我在日志中找不到任何关于此的内容。

有趣的是,初始登录适用于任何浏览器。根本没有登录,去我的网络应用程序,登录,注销,然后再次登录似乎工作。只是这种奇怪的场景不适用于 Safari 14。

当我将我的应用程序 cookie 更改为 SameSite None 时,它​​确实有效。但我对这个结果并不满意。我有其他应用程序具有基本相同的身份验证设置,其中应用程序 cookie 为 Lax,而身份验证 cookie (如随机数、相关性等)具有默认设置并使用 SameSite None。

我有一个使用 .NET 5、Angular 11 和最新最好的 Microsoft Identity Web 库的 BFF 项目。我们使用 Azure Active Directory 登录。

我的身份验证代码如下所示:

登出:

有谁知道我是否可以继续使用 Lax?或者为什么 Lax 可以在其他应用程序中工作,但在这里却不行?

0 投票
1 回答
426 浏览

oauth-2.0 - Dotnet 隔离的 Azure 函数 - 如何访问 HttpContext

我有一个由 HTTP 调用触发的 dotnet 5 Azure 函数(dotnet-isolated)。

该函数将由不同的 Azure 函数应用调用,我想使用 Azure AD 保护目标并使用“客户端凭据”OAuth2 流。

我在以下位置找到了一个很好的示例,可以为我的场景提供信息:Microsoft GitHub Sample

我的问题是,该示例使用 WebApi 应用程序作为服务。这可以访问 HttpContext 对象,使用 Microsft.Identity.Web 程序集中称为“ValidateAppRole”的扩展方法

我的 Azure 函数确实有一个 HttpRequestData 类型的参数。这有一个包含键值对的 headers 属性。其中一个键称为“授权”,其值是 Azure AD 提供的访问令牌。我已经通过 jwt.ms 运行了这个令牌,并且可以确认“角色”集合包含我需要验证的自定义角色。所以我知道所需的信息是存在的;我只是不知道如何以编程方式检查它。

由于 dotnet 隔离的 Azure 函数似乎无法访问 HttpContext 对象。如何进行等同于以下的检查?