Azure ad b2c Azure B2C(IEF/自定义策略)-状态参数

Azure ad b2c Azure B2C(IEF/自定义策略)-状态参数,azure-ad-b2c,identity-experience-framework,Azure Ad B2c,Identity Experience Framework,使用“注册”时,我有以下登录/注册流程: 向用户显示注册屏幕,允许他们输入电子邮件/密码/姓名 验证输入,然后发送电子邮件(RESTAPI)并在b2c自定义扩展属性中设置验证属性 然后用户收到带有验证链接的电子邮件 用户单击电子邮件中的链接,并被发送到新用户的回程旅程 新用户旅程从查询字符串获取参数(电子邮件+验证代码) B2C验证验证码+有效期 如果用户已验证,则通过自定义扩展属性将其设置为已验证,然后发送到(ASP.NET MVC)应用程序 这就是我被卡住的地方——B2C正在将jwt令牌发送

使用“注册”时,我有以下登录/注册流程:

  • 向用户显示注册屏幕,允许他们输入电子邮件/密码/姓名
  • 验证输入,然后发送电子邮件(RESTAPI)并在b2c自定义扩展属性中设置验证属性
  • 然后用户收到带有验证链接的电子邮件

  • 用户单击电子邮件中的链接,并被发送到新用户的回程旅程
  • 新用户旅程从查询字符串获取参数(电子邮件+验证代码)
  • B2C验证验证码+有效期
  • 如果用户已验证,则通过自定义扩展属性将其设置为已验证,然后发送到(ASP.NET MVC)应用程序
  • 这就是我被卡住的地方——B2C正在将jwt令牌发送回应用程序,但用户没有得到“登录”
  • 我是否在第七步遗漏了什么?我的querystring中没有“state”变量,我是否需要构建并包含它,以便B2C和应用程序能够通信?我在这一点上迷路了。我会发布一些b2c政策xml,但不确定什么会有帮助

    编辑:回复Jas:

    这是唯一的方法(为验证请求进行应用程序调用b2c)?我们有多个应用程序,用户可以通过b2c注册,所以我希望避免对每个应用程序进行更改。相反,我希望B2C能在账户验证后告诉应用程序“这个用户没问题”

    我之前看过(你写的!),但我还是希望我可以避免在我们的每个应用程序中做这些工作

    下面是我试图传递给应用程序的jwt“id_令牌”的一个示例:


    旁注:“id\u token”与“id\u token\u hint”相同吗?在谷歌上搜索时,我找不到它们是相同的还是不同的。

    你需要做的是将电子邮件中的邀请链接作为应用程序的链接发送,例如。
    然后,让您的应用程序帐户控制器向策略发出身份验证请求,以完成帐户赎回,并附带一个额外的查询参数“id\u token\u hint=value”。现在,在初始化应用程序openId中间件的情况下,可以进行正确的身份验证。

    谢谢您的回复Jas,我已经更新了我的问题以进行澄清。该示例使用id_tokem_hint;)问题是,如果您不将令牌传递给应用程序以执行身份验证请求,而是直接链接到身份验证端点(如示例所示),则.NET OpenID中间件不会为用户初始化会话。因此,你最终在应用程序中使用令牌,而应用程序会忽略它。你必须像我说的那样,链接到应用程序,应用程序将id令牌提示传递到B2C身份验证请求中。唯一的额外工作是在应用程序(如/INVITE)上调用accountController方法以启动身份验证请求的端点。同时,从传入的URL传递id令牌提示。id令牌提示本身是在您进行操作时生成的,并通过电子邮件发送。只是它不能直接调用身份验证端点,必须通过您的web应用程序传递值。再次感谢您,Jas,让我看看我是否了解我可以在这里做什么。我让B2C将令牌(从我的屏幕截图)传回应用程序,但应用程序无法处理它。因此,如果我的应用程序有一个可以接受令牌的方法(比如/redemedinInvite),我可以使用传递给该方法的令牌作为“id\u token\u hint”的值,并将令牌提示发送回B2C(通过我的.net openid中间件>accountcontroller.login或任何调用)。然后,应用程序将构建一个会话,B2C将能够从令牌中提取声明,并让此人登录?是的,这是有道理的。示例是生成id\u令牌\u提示值的对象。将该值粘贴在电子邮件链接中,但将其作为参数传递给应用程序。然后,该控制器需要调用accountController方法,该方法将id\u令牌\u提示作为额外的查询参数传递给身份验证请求,并使用处理id\u令牌\u提示的b2c策略id