Аутентификация веб-приложения ASP.NET с сервисом WCF

String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

Теперь, чтобы преобразовать массив символов в строку, есть два способа.

Arrays.toString(c);

Возвращает строку [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v].

И:

String.valueOf(c)

Возвращает строку wwwwww3333dfevvv.

В заключение : обратите внимание на Arrays.toString(c), потому что вы получите "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]" вместо "wwwwww3333dfevvv".

10
задан Secret Squirrel 5 July 2009 в 21:59
поделиться

6 ответов

Спасибо всем за ваш вклад. Я остановился на подходе (по крайней мере, пока). Это довольно просто и хорошо работает для моих целей.

Используя clientCredentialType «UserName» и явный метод входа в службу, который возвращает токен безопасности (детали генерации токена опущены для краткости), клиент службы может решить, передавать ли подлинный пароль в качестве свойства пароля в учетных данных клиента или токена безопасности (полученного из метода входа в систему). Если клиент является веб-приложением, токен безопасности может храниться в билете проверки подлинности с помощью форм, сеансе или еще где-нибудь.

Используя «Custom» userNamePasswordValidationMode и настраиваемую реализацию UserNamePasswordValidator,

1
ответ дан 4 December 2019 в 03:39
поделиться

Я могу придумать два возможных решения:

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

Во-вторых, вы где-то храните имя пользователя и хэш пароля (или фактический пароль). Либо в состоянии сеанса, либо в файле cookie пользователя (файл cookie сеанса, хранящийся в памяти, передаваемый пользователю по https). Затем передавайте имя пользователя и пароль службе WCF с каждым запросом.

1
ответ дан 4 December 2019 в 03:39
поделиться

See my answer on Storing password in forms authentication cookie - ASP.NET and WCF calls for a solution that does not require storing passwords.

1
ответ дан 4 December 2019 в 03:39
поделиться

Это очень разумный подход.

Для этого вы настраиваете свою конечную точку службы и настраиваете ее с помощью своего настраиваемого поставщика членства (вы можете сделать то же самое с поставщиком членства SQL, он не требует настраиваемого).

В настроенном веб-приложении событие Authenticate элемента управления Login для создания экземпляра нового прокси службы и установки имени пользователя и пароля в ClientCredentials в прокси.

Теперь, когда вы выполняете вызов службы через прокси, WCF будет передавать эти учетные данные через безопасный канал к службе и использовать их для аутентификации.

Теперь вам просто нужно сохранить прокси в сеансе и использовать его для будущего доступа к службе, поскольку у него есть состояние канала и закрытый ключ.

protected void LoginControl_Authenticate(object sender, AuthenticateEventArgs e)
{
    bool Authenticated = false;
    try
    {
        MyServiceClient proxy = new MyServiceClient("MyServiceEndpoint");
        proxy.ClientCredentials.UserName.UserName = LoginControl.UserName;
        proxy.ClientCredentials.UserName.Password = LoginControl.Password;

        //It doesn't really matter what is called or what it does because 
        //Membership Provider for the Service does the authentication.
        string retval = proxy.login("Logging in"); 

        //Now that channel is established the proxy needs to be kept
        //since it contains the channel state which includes a private key
        Session["MyServiceProxy"] = proxy;  
        Authenticated = true;
    }
    catch (Exception ex)
    {
        //Login Error...
    }
    e.Authenticated = Authenticated;
}
2
ответ дан 4 December 2019 в 03:39
поделиться

Я бы посоветовал взглянуть на Женева , который нацелен на решение сценариев, подобных вашему. Основная идея состоит в том, чтобы требовать один и тот же токен безопасности с помощью HttpModule как для служб WCF, так и для сайта ASP. Токен будет выпущен после аутентификации в вашей базе данных членства и может содержать полезную информацию (утверждения) о пользователе.

Для вступления вы можете прочитать статью Бустаманте .

0
ответ дан 4 December 2019 в 03:39
поделиться

У Microsoft есть служба WCF, которую вы можете использовать для аутентификации пользователей с членством в ASP.NET.

Код на самом деле встроен во фреймворк - вам просто нужно создать файл .svc, чтобы использовать его.

http://msdn.microsoft.com/en-us/library/bb398990.aspx

0
ответ дан 4 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: