Нужен код для проверки правильности ключа в заголовке веб-службы для каждого запроса и методы веб-службы для веб-службы asmx в vb - PullRequest
0 голосов
/ 30 марта 2019

Нужен код в VB для проверки заголовка с зашифрованным ключом для каждого запроса и метода веб-службы через веб-службу asmx. Например: реализовав IHttpModule для класса с асинхронными событиями BeginRequest, я попытался реализовать его неработающим.

Любые подобные примеры будут рекомендованы в asp.net VB и фреймворке 4.6.1.

- следующий код для асинхронного запроса на начало не работает в 4.6 фреймворке

public class BasicAuthHttpModule : IHttpModule  
{  
    const String AUTH_USER_PREFIX= "auth.user.";  
    static readonly IDictionary<String, String> logins = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith(AUTH_USER_PREFIX))  
                                                        .ToDictionary(key => key.Replace(AUTH_USER_PREFIX, String.Empty), value => ConfigurationManager.AppSettings.Get(value));  
    public void Init(HttpApplication context)  
    {  
        context.AuthenticateRequest += OnAuthenticateRequest;  
        context.EndRequest += OnEndRequest;  
    }  


private static void OnAuthenticateRequest(object sender, EventArgs e)  
{  
    var authHeaders = HttpContext.Current.Request.Headers["Authorization"];  
    if (authHeaders != null)  
    {  
        var authHeadersValue = AuthenticationHeaderValue.Parse(authHeaders);  
        if (authHeadersValue.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase) && !String.IsNullOrWhiteSpace(authHeadersValue.Parameter))  
        {  

            try  
            {  
                var credentials = authHeadersValue.Parameter;  
                var encoding = Encoding.GetEncoding("iso-8859-1");  
                credentials = encoding.GetString(Convert.FromBase64String(credentials));  
                string name = credentials.Split(':').First();  
                string password = credentials.Split(':').Last();  

                if (logins.Any(l => l.Key.Equals(name) && l.Value.Equals(password)))  
                {  
                    //Set the principal for validated user  

                    var principal = new GenericPrincipal(new GenericIdentity(name), null);  
                    Thread.CurrentPrincipal = principal;  
                    if (HttpContext.Current != null)  
                    {  
                        HttpContext.Current.User = principal;  
                    }  
                }  
                else  
                {  
                    //Authentication failed  
                    HttpContext.Current.Response.StatusCode = 401;  
                }  
            }  
            catch (FormatException)  
            {  
                HttpContext.Current.Response.StatusCode = 401;  
            }  

        }  
    }  
}
...