我试图找出为什么某些用户无法使用第三方oAuth服务器作为身份提供者登录我们的Web应用程序。
在让Microsoft.Owin告诉我有关问题是什么方面的重大失败。
控制器上的身份验证方法如下:
[System.Web.Mvc.AllowAnonymous]
public ActionResult Authentication([FromUri] string code, [FromUri] string state, [FromUri] string sessionState)
{
openIdClient.Authenticate(Request.GetOwinContext(), code, state);
logger.Info($"OwinLog is: {Request.GetOwinContext().TraceOutput}" );
Session[Auth] = true;
return RedirectToRoute("BilInfoLandingPage", new RouteValueDictionary
{
{"reference", Session[BiReference]},
{"productType", Session[ProductType]},
{"productId", Session[ProductId]}
});
}
到目前为止,我已经尝试在OwinStartup中调用
app.Properties["host.TraceOutput"] = new StringWriter();
,然后在尝试授权后检查TraceOutput。但是其类型与标准owin版本相比没有变化。
我还尝试通过loggerfactory的以下实现方式呼叫app.SetLoggerFactory(new LoggerFactory());
:
private class LoggerFactory : ILoggerFactory
{
public ILogger Create(string name)
{
return new OwinLogger(name);
}
}
private class OwinLogger : ILogger
{
private readonly ILog log4NetLog;
public OwinLogger(string name)
{
log4NetLog = LogManager.GetLogger($"owin.logbridge.{name}");
}
public bool WriteCore(TraceEventType eventType, int eventId, object state, Exception exception, Func<object, Exception, string> formatter)
{
log4NetLog.Info($"{eventType}, eventId = {eventId} stateType={state.GetType()}, state={state}", exception);
return true;
}
}
在调试器下,我可以看到Create
方法确实被多次调用,但从未调用过WriteCore。
我还尝试在System.Diagnostics
中设置跟踪,但结果同样糟糕。
任何帮助或指针将不胜感激。