public void Init(HttpApplication app) { app.AddOnPostAcquireRequestStateAsync((s, e, cb, state) => { HttpContext context = app.Context; var tar = new TypedAsyncResult<Identity>(cb, state); if (context.Session == null || !context.Request.Url.AbsolutePath.Contains("/Connect")) { tar.Complete(true); return tar; } var util = new OAuthContext(AppId, AppSecret) { Culture = CultureInfo.CurrentCulture, ExProcessor = ex => Debug.Write(ex), }; util.SessionStorage = new AspNetSessionStore(context, util); util.BeginAuthenticateRequest(context, tar.AsSafe(ar => { util.EndAuthenticateRequest(ar); tar.Complete(new Identity(util), false); }), null); return tar; }, ar => { var ident = TypedAsyncResult<Identity>.End(ar, null); if (ident == null) return; HttpContext context = app.Context; if (!ident.IsAuthenticated) { //var @params = new Dictionary<string, string> { { "scope", "user_birthday" } }; context.Response.Redirect(ident.AuthContext.GetLoginUrl(context.Request.Url, new LoginParams { ReqPerms = "user_birthday" }), false); context.ApplicationInstance.CompleteRequest(); return; } context.User = new GenericPrincipal(ident, null); }); }