如何在 Azure AD 身份验证后重定向到 ASP Net Core MVC 中的不同控制器操作

2023-12-11

我已将 ASP Net Core 2.0 项目设置为使用 Azure AD 进行身份验证(使用 VS2017 中使用 OIDC 的标准 Azure AD 身份验证模板)。一切工作正常,应用程序返回到基本 url (/) 并在身份验证成功后运行 HomeController.Index 操作。

但是,我现在想在身份验证后重定向到不同的控制器操作(AccountController.CheckSignIn),以便我可以检查用户是否已存在于我的本地数据库表中,如果不存在(即它是新用户),则创建本地用户记录,然后重定向到 HomeController.Index 操作。

我可以将此检查放在 HomeController.Index 操作本身中,但我想避免每次用户单击“主页”按钮时运行此检查。

以下是一些代码片段,可能有助于澄清......

appsettings.json 中的 AAD 设置

"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "<my-domain>.onmicrosoft.com",
    "TenantId": "<my-tennant-id>",
    "ClientId": "<my-client-id>",
    "CallbackPath": "/signin-oidc" // I don't know where this goes but it doesn't exist anywhere in my app and authentication fails if i change it
}

我向 AccountController.CheckSignIn 添加了一个新操作来处理此要求,但我找不到在身份验证后调用它的方法。

public class AccountController : Controller
{
    // I want to call this action after authentication is successful
    // GET: /Account/CheckSignIn
    [HttpGet]
    public IActionResult CheckSignIn()
    {
        var provider = OpenIdConnectDefaults.AuthenticationScheme;
        var key = User.FindFirstValue(ClaimTypes.NameIdentifier);
        var info = new ExternalLoginInfo(User, provider, key, User.Identity.Name);
        if (info == null)
        {
            return BadRequest("Something went wrong");
        }

        var user = new ApplicationUser { UserName = User.Identity.Name };
        var result = await _userManager.CreateAsync(user);
        if (result.Succeeded)
        {
            result = await _userManager.AddLoginAsync(user, info);
            if (!result.Succeeded)
            {
                return BadRequest("Something else went wrong");
            }
        }

        return RedirectToAction(nameof(HomeController.Index), "Home");
    }

    // This action only gets called when user clicks on Sign In link but not when user first navigates to site
    // GET: /Account/SignIn
    [HttpGet]
    public IActionResult SignIn()
    {
        return Challenge(
            new AuthenticationProperties { RedirectUri = "/Account/CheckSignIn" }, OpenIdConnectDefaults.AuthenticationScheme);
    }

}

我找到了一种通过使用重定向使其工作的方法,如下所示......

初创公司内部

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Account}/{action=SignIn}/{id?}");
});

内部账户控制器

// GET: /Account/CheckSignIn
[HttpGet]
[Authorize]
public IActionResult CheckSignIn()
{
    //add code here to check if AzureAD identity exists in user table in local database
    //if not then insert new user record into local user table

    return RedirectToAction(nameof(HomeController.Index), "Home");
}

//
// GET: /Account/SignIn
[HttpGet]
public IActionResult SignIn()
{
    return Challenge(
        new AuthenticationProperties { RedirectUri = "/Account/CheckSignIn" }, OpenIdConnectDefaults.AuthenticationScheme);
}

AzureAd ServiceCollectionExtensions 内部(.net core 2.0)

private static Task RedirectToIdentityProvider(RedirectContext context)
{
    if (context.Request.Path != new PathString("/"))
    {
        context.Properties.RedirectUri = new PathString("/Account/CheckSignIn");
    }
    return Task.FromResult(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Azure AD 身份验证后重定向到 ASP Net Core MVC 中的不同控制器操作 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • PrimeFaces 对话框参考父级

    我有一个 xhtml 页面 显示带有条目的数据表 我还有一个用于插入新条目的按钮 该按钮显示一个包含表单的对话框 插入表格用作
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 如何在 Angular 4 中翻译 mat-paginator?

    你知道如何在 Angular 中翻译 每页项目 吗mat paginator标签 这mat paginator是材料设计中的一个元素 您可以使用MatPaginatorIntl为了这 威尔 豪厄尔制作 https github com an
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 通过 Powershell 中的 Web 服务使用复杂对象?

    我一直在尝试通过 Powershell 使用供应商提供的 Web 服务系统 我正在运行 4 0 以下是我用来设置代理以使用该服务的代码 uri http somehost employer net 9999 AdministrationSe
  • 为什么一个进程共享同一个HT核心时,另一个进程的执行时间会更短

    我有一个带有 4 个 HT 核心 8 个逻辑 CPU 的 Intel CPU 并且构建了两个简单的进程 第一个 int main for int i 0 i lt 1000000 i for int j 0 j lt 100000 j 第二
  • 如何使用 React 路由器嵌套路由

    我有多个布局 应包含不同的屏幕 每个布局都有自己的页眉 页脚和类似页面应该共享的其他内容 这是我想出的代码
  • d3.js 使用极坐标绘制元素

    我是 d3 js 新手 不确定要使用哪个 d3 功能 我需要围绕原点 在圆圈中 同心放置一组元素 svg selectAll circle each function d3 select this attr cx r Math cos th
  • UCM Clearcase:一个项目与多个项目中的流层次结构

    我们有一个项目 即将向稳定的代码库添加一项新功能 除了缺陷修复之外 不会进行任何重大更改 该计划不是在一段时间内 可能一个月 单独开发新功能 进行中间构建和测试 当功能完成并且质量可以接受时 将新功能的代码合并到主分支中 问题是就 Clea
  • scanf 导致 C 中的无限循环

    我对 C 语言比较陌生 但我已经编程几年了 我正在为大学课程编写一个程序 我很困惑为什么下面的 scanf 函数没有被调用 导致无限循环 我尝试过将 scanf 放在函数之外 调用它两次 一次从内部 一次从外部 以及其他一些方式 我在网上读
  • BizTalk部署期间不需要通过控制台导入MIS时

    允许哪些 BizTalk 应用程序 编排 模式 映射更改不强制通过管理控制台导入 MSI 而只在 GAC 中安装 DLL 通过控制台强制导入以停止编排并终止实例 但在 GAC 中安装仅需要重新启动该应用程序的主机 因此 有时不停止生产环境中
  • 一个接一个地执行方法,执行之间有暂停

    新手 obj c 问题 我正在编写一个简单的 iPad 演示文稿 不适用于 Appstore 我的任务是实现几个相继执行的方法 并且它们之间几乎没有停顿 主要结构如下 查看负载 暂停两秒 然后执行method1 暂停两秒 然后执行metho
  • 检查多个列中的一个值

    我有一个包含这样的列的表 例如 id col1 col2 col3 col4 现在 我想检查一下是否ANY of col1 col2 col3 col4具有传递的值 要做到这一点 路还很长 SELECT FROM table WHERE c
  • 从购物车中删除运费计算

    如何从商店的购物车中删除运费计算 这是网站 tintinportintin com br 在 app design frontend base default checkout xml 的第 89 行 你会发现
  • CPU最大线程数

    这与处理器的线程有什么关系 例如 Intel i5 有四个核心和四个线程 我们的程序中可以使用多少个线程 例如在 C 中使用 std thread STL 8个线程对于一个程序来说是大还是小 这确实取决于 根据经验 将线程数量限制为接近核心
  • Hyperledger Composer:错误:无法请求身份。尝试注册用户并返回证书时出错

    我正在关注一个hyperledger composer tutorial 我无法在执行命令时执行步骤 15 composer identity request c PeerAdmin byfn network org1 only u adm
  • 为什么 stat_密度 (R; ggplot2) 和 gaussian_kde (Python; scipy) 不同?

    我正在尝试对一系列可能不是正态分布的分布生成基于 KDE 的 PDF 估计 我喜欢 R 中 ggplot 的 stat 密度 似乎可以识别频率中的每个增量波动 但无法通过 Python 的 scipy stats gaussian kde
  • 无法 json_encode() 数组或 Laravel 集合:“不支持类型”

    我不知道我做错了什么 因为它适用于应用程序中的所有其他模型 我多次刷新并重新播种数据库 这些模型扩展了相同的抽象方法 这是控制器中的代码 substrates this gt substrates gt all gt toArray tem
  • 将 CSV 文件中的日期列以“YYYYMMDDHH24MISS”格式格式化为 ksh 中的“YYYYMMDD HH24MISS”格式

    我编写了一个脚本 它从 CSV 文件中获取值并将其插入到 postgres 表中 但遇到了问题 CSV 文件中的日期列采用 YYYYMMDDHH24MISS 格式 表中的同一列定义为时间戳 当使用 copy 命令插入时 出现以下错误 ERR
  • 从 React 数组中删除项目

    我的removeItem函数有问题 它应该删除当前的 li 该按钮嵌套在 this state list 上的数组中的项目中 目前没有代码 因为我尝试了很多东西 但没有任何效果 所以我最终console logs看看发生了什么 所以我删除了
  • 在 Cpanel 上上传 Laravel 项目中的图像

    我的功能是上传图像 但问题是为什么图像没有上传到 public html 文件夹 图像上传到项目的公共文件夹中 private function upload image tbl name image gt getClientOrigina
  • Qt::BackgroundRole 似乎被忽略

    我正在使用源自的自定义表格模型QAbstractTableModel 我已经覆盖了headerData 我可以通过返回颜色来更改单个行标题 或列标题 但我在这里只讨论行 的字体颜色Qt ForegroundRole if role Qt F
  • Java Swing:JScrollPane 不工作

    我有一个包含一些字段的 JPanel JPanel 的高度有限 因此我必须在它周围放置一个 JScrollPane 以便人们可以向下滚动 正如您在下面看到的 它显示得非常完美 但您无法向下 或向上 滚动 DetailPanel detail
  • 如何在 Azure AD 身份验证后重定向到 ASP Net Core MVC 中的不同控制器操作

    我已将 ASP Net Core 2 0 项目设置为使用 Azure AD 进行身份验证 使用 VS2017 中使用 OIDC 的标准 Azure AD 身份验证模板 一切工作正常 应用程序返回到基本 url 并在身份验证成功后运行 Hom