Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc 如何在.Net Core MVC中从OpenIdConnect令牌响应中提取状态参数_Asp.net Core Mvc_Openid Connect_Azure Ad B2c - Fatal编程技术网

Asp.net core mvc 如何在.Net Core MVC中从OpenIdConnect令牌响应中提取状态参数

Asp.net core mvc 如何在.Net Core MVC中从OpenIdConnect令牌响应中提取状态参数,asp.net-core-mvc,openid-connect,azure-ad-b2c,Asp.net Core Mvc,Openid Connect,Azure Ad B2c,我们正在使用Azure b2c处理我们在.net核心MVC站点上的登录。 我们希望使用可选的state参数来保存一些数据/a值,这些数据/a值位于对站点的初始请求(该值可能位于查询字符串参数中),然后发送到b2c进行登录,成功登录返回到站点。 OpenIDConnect允许在请求中设置此状态值,并将其与令牌响应一起传递回 设置值似乎比较简单;在OpenIdConnectOptions中的OnRedirectToIdentityProvider事件中,如下所示: public Task OnRed

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

设置值似乎比较简单;在
OpenIdConnectOptions
中的
OnRedirectToIdentityProvider
事件中,如下所示:

public Task OnRedirectToIdentityProvider(RedirectContext context){
   ...   
   context.ProtocolMessage.SetParameter("state", "mystatevalue");
   ...
}
但是,当用户返回时,我看不到如何再次获取该值

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

我在哪里可以从中获取未加密的值

我已经看过b2c的Azure文档,但我找不到这方面的示例


感谢您

通过使用
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;
}