Asp.net core mvc 如何在.Net Core MVC中从OpenIdConnect令牌响应中提取状态参数
我们正在使用Azure b2c处理我们在.net核心MVC站点上的登录。 我们希望使用可选的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
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;
}