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

Уже неделю мучаюсь, в голове каша какая то
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35894405
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.codeplex.com/WCFSecurity
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35895812
hover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
аутентификация и авторизация в WCF
    #35896314
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hover,

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

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

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

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

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

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

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

[PrincipalPermission(SequrityAction.Demand, role="someRole")]
void SomeMethod();
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35897114
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аттрибуты можно цеплять динамически. поищите, тема уже не раз обсуждалась
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35897155
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то я попутал с динамическим применением аттрибута knowntype
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35897845
тоже интересен данный вопрос.
А какие варианты существуют? не хочется изобретать велосипед:
- по сертификату/логину/паролю авторизовали пользователя, а потом при каждом его действии лезть в справочник (в бд) позволенных ему операций и проверять разрешения на выполнение?
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35897928
alexdr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сцылочку 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
аутентификация и авторизация в WCF
    #35898217
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА какие варианты существуют? не хочется изобретать велосипед:
А какие варианты существуют? не хочется изобретать велосипед:]И не нежно
Права задаются на операции + возмозность интеграции с внешними БД.Группы и пользователи могут определяются запросами в виде настроек.Например,должности(отделы) и сотрудники из таблиц приложения или LDAP.Есть готовая реализация RoleProvider.Устраивает на все 100%.
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #35898218
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Промахнулся NetSqlAzMan
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
аутентификация и авторизация в WCF
    #36745760
МышЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую

У меня похожая проблема.
Есть клиент винформс, есть служба (на ИИСе).
Нужна только 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
аутентификация и авторизация в WCF
    #36747964
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два способа задавать пермишены: декларативно, императивно.

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

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

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

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

Но!
Почему в IIdentity есть свойство Name и нет пароля, и главное, так я как это хозяйство без клиента тестировать то?
...
Рейтинг: 0 / 0
аутентификация и авторизация в WCF
    #36751902
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот пример с мсдн по заданию для домена приложения пермишены,
только вместо 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
аутентификация и авторизация в WCF
    #36752148
МышЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stimpi,
да я в принципе такой уже видел, но посчитал что то что на ИИСе стоит проверяют как то иначе, консольное приложение какое-то, а сейчас думаю, правда, почему нет

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


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