Получение проверки подлинности с помощью форм на странице входа ASP.NET, используемой приложением Silverlight 4 - PullRequest
0 голосов
/ 11 января 2012

Это должно просто работать.Я прочитал все статьи, которые я мог найти через google по этой теме, пытался скопировать столько, сколько я мог, из других статей как в StackOverflow, так и в CodeProject и других, но независимо от того, что я пытаюсь - это не работает.

У меня есть приложение silverlight, которое нормально работает с использованием аутентификации Windows.

Чтобы запустить его при аутентификации с помощью форм, я:

Отредактировал файл web.config для включения аутентификации с помощью форм (и удалите конфигурацию проверки подлинности Windows):

    <authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="logon.aspx" defaultUrl="index.aspx"      protection="All" path="/" timeout="30" />
    </authentication>

Создайте стандартный код logon.aspx и logon.aspx.cs за страницей для ввода имени и пароля пользователя и создания файла cookie для проверки подлинности при входе в систему.успешно, а затем перенаправил пользователя на корневую страницу веб-сайта, которая является приложением silverlight:

    private void cmdLogin_ServerClick( object sender, System.EventArgs e )
    {
        if ( ValidateUser( txtUserName.Value, txtUserPass.Value ) )
        {
            FormsAuthentication.SetAuthCookie(txtUserName.Value, true);
            var cookie = FormsAuthentication.GetAuthCookie(txtUserName.Value, true);
            cookie.Domain = "mymachine.mydomain.com";
            this.Response.AppendCookie(cookie);

            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if ( strRedirect == null )
                strRedirect = "index.aspx";
            Response.Redirect( strRedirect, true );
        }
    }

Таким образом, перенаправление после успешного входа в систему запускает мое приложение silverlight.

Однакопользователь не аутентифицирован при выполнении кода запуска Silverlight:

    public App()
    {
        InitializeComponent();
        var webContext = new WebContext();
        webContext.Authentication = new FormsAuthentication();
        ApplicationLifetimeObjects.Add( webContext );
    }

    private void ApplicationStartup( object sender, StartupEventArgs e )
    {
        Resources.Add( "WebContext", WebContext.Current );

        // This will automatically authenticate a user when using windows authentication
        // or when the user chose "Keep me signed in" on a previous login attempt
        WebContext.Current.Authentication.LoadUser(ApplicationUserLoaded, null);

        // Show some UI to the user while LoadUser is in progress
        InitializeRootVisual();
    }

TОшибка возникает в методе ApplicationUserLoaded, который всегда имеет для свойства HasError значение true при входе в метод.

    private void ApplicationUserLoaded( LoadUserOperation operation )
    {
        if((operation != null) && operation.HasError)
        {
            operation.MarkErrorAsHandled();
            HandlerShowWebServiceCallBackError(operation.Error, "Error loading user context.");
            return;
        }
        ...
    }

Ошибка, о которой сообщается, выглядит следующим образом - из того, что мне кажется, что пользователь не являетсяне считается аутентифицированным при входе в приложение silverlight, поэтому он направляет код, чтобы попытаться вернуть страницу входа, которая возвращает данные, неожиданные для приложения silverlight:

An exception occurred while attempting to contact the web service.
Please try again, and if the error persists, contact your administrator.

Error details:
Error loading user context.

Exception details:
Load operation failed for query 'GetUser'. The remote server returned an error: NotFound.

Есть идеи?

Исходя из всего, что я прочитал, это должно быть довольно просто и просто работать - поэтому я, очевидно, делаю очень простую ошибку.

Мне интересно, если после аутентификации пользователя в моем логиневеб-странице .aspx, мне нужно каким-то образом передать аутентифицированный экземпляр WebContext со страницы входа в мое приложение silverlight вместо создания нового экземпляра в коде запуска приложения silverlight - но я не знаю, как это сделать.

Цените любые или все предложения.

1 Ответ

0 голосов
/ 11 января 2012
...