我们正在使用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文档,但我找不到一个例子。
感谢
答案 0 :(得分: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;
}