【问题标题】:How to extract state parameter from OpenIdConnect Token response in .Net Core MVC如何从 .Net Core MVC 中的 OpenIdConnect 令牌响应中提取状态参数
【发布时间】:2018-07-03 09:00:12
【问题描述】:

我们正在使用 Azure b2c 来处理我们在 .net 核心 MVC 站点上的登录。 我们想使用可选的state 参数来保存对站点的初始请求(该值可能在查询字符串参数中)之间的一些数据/值,然后将其发送到 b2c 登录,并成功登录返回网站。 OpenIDConnect 允许在请求中设置此状态值,并将其与令牌响应一起传回。

看来设置值比较简单;在OnRedirectToIdentityProvider 事件中的OpenIdConnectOptions 中像这样:

public Task OnRedirectToIdentityProvider(RedirectContext context){
   ...   
   context.ProtocolMessage.SetParameter("state", "mystatevalue");
   ...
}

但是,当用户返回时,我看不到如何再次取回这个值。

我可以看到OnTicketReceived 事件被命中,它有一个TicketReceivedContext,其中有一个Form 属性和一个state 值,但是它仍然是加密的。

我可以从哪里取回未加密的值?

我查看了 b2c 的 Azure 文档,但找不到关于此的示例。

谢谢

【问题讨论】:

    标签: asp.net-core-mvc openid-connect azure-ad-b2c


    【解决方案1】:

    通过使用OnTokenValidated 事件成功地完成了这项工作。 这样就可以得到如下未加密的参数。

    ...//first set up the new event
    options.Events = new OpenIdConnectEvents()
    {
        ...
        OnTokenValidated = OnTokenValidated
    };
    ...
    
    private Task OnTokenValidated(TokenValidatedContext tokenValidatedContext)
    {
        var stateValue = tokenValidatedContext.ProtocolMessage.GetParameter("state");
        if (stateValue != null)
        {
            //do something with that value..
        }
        return Task.CompletedTask;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2019-02-10
      • 2020-01-24
      • 2014-08-22
      • 2021-07-29
      • 1970-01-01
      相关资源
      最近更新 更多