如何从.Net Core MVC中的OpenIdConnect令牌响应中提取状态参数

时间:2018-01-24 10:38:42

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

我们正在使用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文档,但我找不到一个例子。

感谢

1 个答案:

答案 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;
}