Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / аутентификация и авторизация в WCF / 20 сообщений из 20, страница 1 из 1
26.03.2009, 16:56
    #35894400
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Народ если не сложно, покажите на примере простенького сервиса как правильно реализуется аутентификация и авторизация в WCF?

Уже неделю мучаюсь, в голове каша какая то
...
Рейтинг: 0 / 0
26.03.2009, 16:59
    #35894405
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
www.codeplex.com/WCFSecurity
...
Рейтинг: 0 / 0
27.03.2009, 11:07
    #35895812
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
bured,

Это я уже читал.
Вот есть простой пример из MSDN
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// Only members of the CalculatorClients group can call this method.
[PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")]
public double Add(double a, double b)
{
    return a + b;
}


Если мне нужно запретить пользователям CalculatorClients использовать это метод или наоборот разрешить еще одной роли выполнять этот метод, то нужно менять код и перекомпилировать все приложение?
...
Рейтинг: 0 / 0
27.03.2009, 13:11
    #35896314
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
hover,

если вам нужно внести коррективы в файл класса, нужно его перекомпилять?
...
Рейтинг: 0 / 0
27.03.2009, 14:01
    #35896503
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
buredhover,

если вам нужно внести коррективы в файл класса, нужно его перекомпилять?

Т.е. я так понял, что динамически роли нельзя наделять правами?
...
Рейтинг: 0 / 0
27.03.2009, 14:03
    #35896510
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
buredhover,

если вам нужно внести коррективы в файл класса, нужно его перекомпилять?

Если мне нужно разрешить пользователю использовать какую либо операцию, нужно обязательно вносить коррективы в файл класса? Без этого никак?
...
Рейтинг: 0 / 0
27.03.2009, 14:52
    #35896691
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Раздавай права не на роль, а на операцию,тогда менять ничего не нужно будет
...
Рейтинг: 0 / 0
27.03.2009, 15:55
    #35896866
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
SeVaРаздавай права не на роль, а на операцию,тогда менять ничего не нужно будет

А как насчет примерчика, если не затруднит
...
Рейтинг: 0 / 0
27.03.2009, 16:05
    #35896902
hover
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
SeVaРаздавай права не на роль, а на операцию,тогда менять ничего не нужно будет

Так получается я и выдаю права на операцию, вот таким кодом

[PrincipalPermission(SequrityAction.Demand, role="someRole")]
void SomeMethod();
...
Рейтинг: 0 / 0
27.03.2009, 17:04
    #35897114
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
аттрибуты можно цеплять динамически. поищите, тема уже не раз обсуждалась
...
Рейтинг: 0 / 0
27.03.2009, 17:19
    #35897155
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
что-то я попутал с динамическим применением аттрибута knowntype
...
Рейтинг: 0 / 0
28.03.2009, 12:24
    #35897845
аутентификация и авторизация в WCF
тоже интересен данный вопрос.
А какие варианты существуют? не хочется изобретать велосипед:
- по сертификату/логину/паролю авторизовали пользователя, а потом при каждом его действии лезть в справочник (в бд) позволенных ему операций и проверять разрешения на выполнение?
...
Рейтинг: 0 / 0
28.03.2009, 13:53
    #35897928
alexdr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Сцылочку bured публиковал во втором сообщении. Цитата оттуда:
How to choose effective strategies for authorization
You can use the following resource access strategies:
• Role-based. Map users to roles and check whether a role can perform the requested
operation.
• Identity-based. Authorize users based on their identity.
• Claims-based. Grant or deny access to the operation or resources based on the client’s
claims.
• Resource-based. Protect resources using access control lists (ACLs).
Однако, claims-based security лежит вне сферы рассмотрения данного гайда. Поэтому лучшее что могу сделать - это направить на MSDN в поисках необходимой информации.
...
Рейтинг: 0 / 0
28.03.2009, 19:53
    #35898217
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
авторА какие варианты существуют? не хочется изобретать велосипед:
А какие варианты существуют? не хочется изобретать велосипед:]И не нежно
Права задаются на операции + возмозность интеграции с внешними БД.Группы и пользователи могут определяются запросами в виде настроек.Например,должности(отделы) и сотрудники из таблиц приложения или LDAP.Есть готовая реализация RoleProvider.Устраивает на все 100%.
...
Рейтинг: 0 / 0
28.03.2009, 19:54
    #35898218
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Промахнулся NetSqlAzMan
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.07.2010, 17:57
    #36745760
МышЪ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Приветствую

У меня похожая проблема.
Есть клиент винформс, есть служба (на ИИСе).
Нужна только custom авторизация, роли, пользователи, что кому положено хранится в базе на СКЛ, в таблицах.
Покопался в интернете , предлагают так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
class CustomPrincipal : IPrincipal {
  IIdentity _identity;
  string[] _roles;
  Cache _cache = HttpRuntime.Cache;

  public CustomPrincipal(IIdentity identity) {
    _identity = identity;
  }

  // helper method for easy access (without casting)
  public static CustomPrincipal Current {
    get {
      return Thread.CurrentPrincipal as CustomPrincipal;
    }
  }

  public IIdentity Identity {
    get { return _identity; }
  }

  // return all roles (custom property)
  public string[] Roles {
    get {
      EnsureRoles();
      return _roles;
    }
  }

  // IPrincipal role check
  public bool IsInRole(string role) {
    EnsureRoles();

    return _roles.Contains(role);
  }

  // cache roles for subsequent requests
  protected virtual void EnsureRoles() {
    // caching logic omitted – see the sample download
  }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class AuthorizationPolicy : IAuthorizationPolicy {
  // called after the authentication stage
  public bool Evaluate(EvaluationContext evaluationContext, 
     ref object state) {
    // get the authenticated client identity from the evaluation context
    IIdentity client = GetClientIdentity(evaluationContext);

    // set the custom principal
    evaluationContext.Properties['Principal'] = 
       new CustomPrincipal(client);

    return true;
  }

  // rest omitted
}

Так вот, что за IIdentity client = GetClientIdentity(evaluationContext);

Кто-нибудь понимает, как это реализуется?
...
Рейтинг: 0 / 0
19.07.2010, 12:54
    #36747964
stimpi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
Есть два способа задавать пермишены: декларативно, императивно.

При декларативном надо перекомпилировать, при императивно можно "на лету" подсовывать другие роли с БД и прочее.

Почитайте MCTS: 70-536 тренинг кит от майкрософта, глава 11-12. Там подробно с примерами все описано.
...
Рейтинг: 0 / 0
21.07.2010, 11:07
    #36751844
МышЪ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
скачал, прочитал (Lesson 1: Authenticating and Authorizing Users в 12 чаптере)

но не могу протестировать, чтобы отсекать ошибки, а они будут)), я не подключаю клиента, т е просто сделал запускаемым проектом в студии свою службу и запускаю её
Выдаёт ошибку:
В контексте авторизации особый участник не указан.
Я надеюсь что это потому что студия не "представилась" как клиент для службы.

Очень плохо, но я так и не понимаю сути авторизации до конца.
Вот как я понимаю:
1)клиент отправляет запрост на службу, где он указал свой логин и пароль
2)на службе при обращении создаётся мой CustomIdentity
3)CustomPrinsipal берёт его, и проверяет, есть у него права или нет

Но!
Почему в IIdentity есть свойство Name и нет пароля, и главное, так я как это хозяйство без клиента тестировать то?
...
Рейтинг: 0 / 0
21.07.2010, 11:27
    #36751902
stimpi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
вот пример с мсдн по заданию для домена приложения пермишены,
только вместо PrincipalPolicy.WindowsPrincipal будет ваш кастомный класс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
	static void Main(string[] args)
	{
		// Create a new thread with a generic principal.
		Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Set the principal policy to WindowsPrincipal.
		AppDomain currentDomain = AppDomain.CurrentDomain;
		currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
			
		// The new thread will have a Windows principal representing the
		// current user.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();

		// Create a principal to use for new threads.
		IIdentity identity = new GenericIdentity("NewUser");
		IPrincipal principal = new GenericPrincipal(identity, null);
		currentDomain.SetThreadPrincipal(principal);
			
		// Create a new thread with the principal created above.
		t = new Thread(new ThreadStart(PrintPrincipalInformation));
		t.Start();
		t.Join();
		
		// Wait for user input before terminating.
		Console.ReadLine();
	}

	static void PrintPrincipalInformation()
	{
		IPrincipal curPrincipal = Thread.CurrentPrincipal;
		if(curPrincipal != null)
		{
			Console.WriteLine("Type: " + curPrincipal.GetType().Name);
			Console.WriteLine("Name: " + curPrincipal.Identity.Name);
			Console.WriteLine("Authenticated: " +
				curPrincipal.Identity.IsAuthenticated);
			Console.WriteLine();
		}
	}
}


...
Рейтинг: 0 / 0
21.07.2010, 12:40
    #36752148
МышЪ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аутентификация и авторизация в WCF
stimpi,
да я в принципе такой уже видел, но посчитал что то что на ИИСе стоит проверяют как то иначе, консольное приложение какое-то, а сейчас думаю, правда, почему нет

а принцип действия я правильно понял?
не подумайте, что мне в лом гуглить, я гуглил уже очень много, но я в каком то ступоре))
просто в одном примере показано что надо ещё свой
class AuthorizationPolicy : System.IdentityModel.Policy.IAuthorizationPolicy
сделать, я его сделал, он в него в отладчике, всё в порядке, но метод
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
а я не понимаю как мне из EvaluationContext сделать Identity?
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / аутентификация и авторизация в WCF / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]