Jac*_*ard 3 azure windows-identity acs
我希望能够检测用户何时使用被动ac登录我的应用程序,以便我可以将它们添加到我的数据库中,如果这是第一次使用我的应用程序.现在我正在订阅WSFederationAuthenticationModule.SignedIn,但我觉得我错过了什么.主要是我不确定订阅活动的最佳位置,我让它在PostAuthenticateRequest内部工作,但它有点hacky.有什么建议?
此代码来自global.asax
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) =>
{
try
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn -= SignedIn;
}
finally
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += SignedIn;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
编辑:
现在我将使用一个标志变量来确保我只订阅一次SignedIn.除非有人有任何其他建议:)感谢Sandrino的帮助.这就是我现在所拥有的.
private static bool isFirstRequest = true;
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) => {
if (isFirstRequest)
{
FederatedAuthentication
.WSFederationAuthenticationModule.SignedIn += SignedIn;
isFirstRequest = false;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
编辑: 更多信息.如果我使用azure仿真器会发生此问题,它也可能在部署时发生但我没有尝试过.我已经测试过我是否因为尝试写入文本文件并且没有创建文本文件而无法进行调试.
每次引发PostAuthenticateRequest事件时,为什么要订阅SignedIn事件?您可以在应用程序启动时(在Global.asax中)简单地订阅它,并为将登录的每个用户引发它:
public class MvcApplication : System.Web.HttpApplication
{
...
protected void Application_Start()
{
...
FederatedAuthentication.ServiceConfigurationCreated += (s, e) =>
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += new EventHandler(OnUserSignedIn);
};
}
private void OnUserSignedIn(object sender, EventArgs e)
{
// Custom logic here.
}
}
Run Code Online (Sandbox Code Playgroud)
该SignedIn事件是检测应用程序继续之前的用户登录的最佳方式.请看下面的图表.在重定向回页面之前,会引发SignedIn事件以允许您检测用户登录:

参考:http://msdn.microsoft.com/en-us/library/ee517293.aspx
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |