簡體   English   中英

ASP.NET外部認證服務集成

[英]ASP.NET External Authentication Services Integration

我的ASP.NET webapp將受第三方代理(SM)的保護。 SM將攔截對webapp的每次調用,將用戶認證為有效的系統用戶,添加一些頭用戶信息,並將其重定向到我的webapp。 然后我需要驗證用戶是我網站的活躍用戶。

目前,我通過在Global.asax.cs文件中實現Application_AuthenticateRequest方法來驗證用戶身份。 我有一個自定義成員資格提供程序,其ValidateUser方法,檢查用戶是否存在於我的數據庫的users表中。

如果這是一個好的方法,只是想得到評論。

protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        //if user is not already authenticated
        if (HttpContext.Current.User == null)
        {

            var smcred = ParseAuthorizationHeader(Request);
            //validate that this user is a active user in the database via Custom Membership 
            if (Membership.ValidateUser(smcred.SMUser, null))
            {
                //set cookie so the user is not re-validated on every call.
                FormsAuthentication.SetAuthCookie(smcred.SMUser, false);
                var identity = new GenericIdentity(smcred.SMUser);
                string[] roles = null;//todo-implement role provider Roles.Provider.GetRolesForUser(smcred.SMUser);
                var principal = new GenericPrincipal(identity, roles);

                Thread.CurrentPrincipal = principal;
                if (HttpContext.Current != null)
                {
                    HttpContext.Current.User = principal;
                }
            }

        }
    }

    protected virtual SMCredentials ParseAuthorizationHeader(HttpRequest request)
    {
        string authHeader = null;
        var smcredential = new SMCredentials();
    //here is where I will parse the request header for relevant tokens ex username

        //return smcredential;
        //mockup below for username henry
        return new SMCredentials() { SMUser = "henry", FirstName = "", LastName = "", EmailAddr = "" };

    }

我會選擇屬性方法來保持MVC更像。 它還可以讓您獲得更大的靈活性,您可能會為不同的控制器/操作提供不同的成員資格提供程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM