Jump to content

Сокращенный язык авторизации

(Перенаправлено с АЛЬФА (XACML) )
АЛЬФА
Парадигма Декларативное программирование
Разработано Пол Джамбьяджи, Дэвид Броссар
Разработчик Аксиоматика
Впервые появился 16 июля 2012 г .; 12 лет назад ( 16 июля 2012 г. ) [ 1 ]
Расширения имен файлов .альфа
Веб-сайт alfa.guide
Основные реализации
Аксиоматика, твердые знания
Под влиянием
XML , XACML
Под влиянием
Рего , Кедр

Сокращенный язык авторизации ( ALFA ) — это предметно-ориентированный язык, используемый при формулировании политик контроля доступа. [ 2 ]

Источник

[ редактировать ]

XACML , расширяемый язык разметки контроля доступа, использует XML в качестве основного языка кодирования. Написание политик XACML непосредственно в XACML приводит к созданию раздутого, неудобного для человека текста, [ 3 ] поэтому потребовалась новая, более упрощенная система обозначений. Поэтому исследователь аксиоматики Пабло Джамбиаджи разработал ALFA, язык аксиоматики для авторизации.

ALFA отображается непосредственно в XACML. ALFA содержит те же структурные элементы , что и XACML, т.е. PolicySet, Policy и Rule.

Axiomatics жертвует ALFA в пользу OASIS

[ редактировать ]

В марте 2014 года Axiomatics объявила, что передает ALFA OASIS XACML. Техническому комитету [ 4 ] с целью продвижения его стандартизации.

Впоследствии ALFA был переименован в «Сокращенный язык для авторизации» и подан на стандартизацию.

Примеры использования

[ редактировать ]
  • Вариант использования в медицинских целях: врачи могут просматривать медицинские записи пациентов, с которыми они общаются.
  • Вариант использования в финансовых целях: сотрудники в Сингапуре могут просматривать учетные записи клиентов сотрудников, находящихся в Сингапуре.
  • Вариант использования при страховании: страховой агент может утвердить претензию пользователя, если претензия находится в том же регионе, что и агент, и если сумма претензии меньше суммы утверждения агента.

Слова «доктор», «просмотр», «медицинская карта», «Сингапур»… все это примеры значений атрибутов. Атрибуты составляют строительные блоки политики в ABAC и, следовательно, в ALFA.

Структура

[ редактировать ]

Как и XACML, ALFA имеет три структурных элемента:

  • Полисисет
  • Политика
  • Правило

Как и в XACML, PolicySet может содержать элементы PolicySet и Policy. Политика может содержать элементы Правила. Правило содержит решение (разрешить или запретить). Кроме того, в ALFA можно добавлять элементы Rule к элементам PolicySet и Policy. Элементы PolicySet, Policy и Rule могут быть вложенными или на них можно ссылаться.

Для разрешения конфликтов между братьями и сестрами ALFA (как и XACML) использует алгоритмы объединения. Можно использовать несколько алгоритмов объединения.

Типы данных

[ редактировать ]

ALFA поддерживает все типы данных , определенные в базовой спецификации OASIS XACML . Некоторые типы данных, например числовые (целые, двойные) и логические, напрямую преобразуются из ALFA в XACML. Другие необходимо преобразовать, например атрибуты даты или времени. Чтобы преобразовать атрибут в соответствующий тип данных, используйте нотацию «значение»:тип данных. См. примеры ниже. [ 5 ]

Собственные значения атрибутов, сопоставленные непосредственно из ALFA с XACML.

[ редактировать ]

Строковые, целые, двойные и логические значения напрямую преобразуются из ALFA в XACML. Им не нужна конверсия

Политика ALFA с использованием логических атрибутов

[ редактировать ]
	namespace exampleBoolean{
		policy article{
			target clause userRole == "editor" and actionId == "edit" and itemType=="article"
			apply firstApplicable
			rule publishedArticles{
				target clause published == true
				permit
			}
		}
	}

Значения атрибутов, требующие явного преобразования

[ редактировать ]

Следующие типы данных атрибутов требуют явного преобразования:

Пример: политика ALFA с использованием AnyURI

[ редактировать ]

Эта политика преобразует строковое значение в AnyURI.

	attribute userDisallowedResources{
		category = subjectCat
		id = "userDisallowedResources"
		type = string
	}
	rule allowProfileAccess{
		target clause url == "http://<host>:<port>/profile/":anyURI
		permit
	}

Примеры правил

[ редактировать ]

Простая политика и правило с условием

[ редактировать ]

Следующий пример ALFA представляет политику XACML, содержащую одно правило. И политика, и правило имеют цель. В правиле также есть условие, которое используется для сравнения двух атрибутов вместе для реализации проверки связи (идентификатор пользователя должен быть равен владельцу). Всякий раз, когда нужно проверить два атрибута вместе, они должны использовать условие.

	namespace example{
		policy article{
			target clause itemType=="article"
			apply firstApplicable
			rule editArticle{
				target clause actionId == "edit" and userRole == "editor"
				permit
				condition userId == owner
			}
		}
	}

Использование времени в политике XACML, написанной на ALFA

[ редактировать ]
	namespace exampleTime{
		policy checkTimeAccess {
			apply firstApplicable
		  	rule checkNightAccess {
	   			target clause role == "supervisor" and document == "medicalrecord"
	   			condition timeInRange(timeOneAndOnly(currentTime), "22:00:00":time, "06:00:00":time)
				permit
			}
	  	}
	}

Ссылки на политику

[ редактировать ]

ALFA может использовать ссылки на политики (наборы). Фактически они используются неявно при выполнении следующих действий.

namespace com.axiomatics{
	namespace example{
		/**
		 * A policy about what managers can do. It is linked to from the
		 * documents policy set.
		 */
		policy managers{
			target clause role == "manager"
			apply firstApplicable
			rule allowSameDepartment{
				condition user.department == document.department
				permit
			}
		}
	}
	
	/**
	 * The main policy. It references the managers policy
	 */
	policyset documents{
		target clause resourceType == "document"
		apply firstApplicable
		// The following is a policy reference
		example.managers
	}
}

Обязательства и советы

[ редактировать ]

Обязательства и рекомендации — это операторы в XACML, которые могут быть возвращены из PDP в PEP вместе с решением (Разрешить, Запретить...). Обязательства и рекомендации активируются либо при разрешении, либо при отказе.

namespace example{
    import Attributes.*
    advice notify = "example.notify"
    
    policy readDocuments{
        target clause actionId=="read" and objectType=="document"
        apply firstApplicable
        /**
         * This rule denies access if the time is not between 9 and 5
         */
        rule denyOutsideHours{
            target clause currentTime<"09:00:00":time or currentTime>"17:00:00":time
            deny
            on deny{
                advice notify{
                    acme.obligations.message = "You cannot access this service outside office hours"
                }
            }
        }
        /**
         * This rule grants managers access
         */
        rule allowManagers{
            target clause acme.user.role=="manager"
            permit
        }
        /**
         * This rule catches anything else that might have fallen to this point
         */
        rule failsafeDeny{
            deny
            on deny{
                advice notify{
                    acme.obligations.message = "Your request did not match the policy. Please try again"
                }
            }
        }
    } 
}

Разрушьте сценарий стеклянной авторизации

[ редактировать ]

Начните с определения атрибутов и обязательств:

namespace com.axiomatics.examples{
	
	import Attributes.*
	
	obligation breakTheGlass = "com.axiomatics.examples.breakTheGlass"
	obligation auditLog = "com.axiomatics.examples.auditLog"
	
	namespace user{
		attribute role{
			category = subjectCat
			id = "com.axiomatics.examples.user.role"
			type = string
		}
		attribute identifier{
			category = subjectCat
			id = "com.axiomatics.examples.user.identifier"
			type = string
		}
	}
	namespace patient{
		attribute assignedDoctor{
			category = resourceCat
			id = "com.axiomatics.examples.user.assignedDoctor"
			type = string
		}
	}
	namespace record{
		attribute identifier{
			category = resourceCat
			id = "com.axiomatics.examples.record.identifier"
			type = string
		}
	}
	attribute actionId{
		category = actionCat
		id = "com.axiomatics.examples.actionId"
		type = string
	}
	attribute objectType{
		category = resourceCat
		id = "com.axiomatics.examples.objectType"
		type = string
	}
	attribute isEmergency{
		category = environmentCat
		id = "com.axiomatics.examples.isEmergency"
		type = boolean
	}
	attribute message{
		category = environmentCat
		id = "com.axiomatics.examples.message"
		type = string
	}

Теперь политику можно определить с помощью трех правил:

  • первое правило — для обычного доступа (врачи могут просматривать записи пациентов, к которым они прикреплены).
  • второе правило — особый доступ, поскольку стекло разбито.
  • третье правило — это правило, которое приводит к возникновению обязательства сообщать пользователю, как разбить стекло.
	/**
	 * Control access to medical records
	 */
	policy accessMedicalRecord{
		target clause actionId == "view" and objectType == "medical record"
		apply firstApplicable
		/**
		 * Doctors can view medical records of patients they are assigned to
		 */
		rule allowRegularAccess{
			target clause user.role == "doctor"
			condition patient.assignedDoctor == user.identifier
			permit
		}
		/**
		 * Doctors can view any medical reason in the case of an emergency
		 */
		rule allowBreakTheGlassAccess{
			target clause isEmergency == true
			permit
			on permit{
				obligation auditLog{
					message = "A doctor has gotten access to a medical record by breaking the glass"
					user.identifier = user.identifier
					record.identifier = record.identifier
					currentDateTime = currentDateTime
				}
				
			}
		}
		/**
		 * Deny other accesses. If access is normally denied, tell doctors how
		 * they can get access by "breaking the glass".
		 */
		rule denyAccess{
			deny
			on deny{
				obligation breakTheGlass{
					message = "You do not have access to this medical record. To be granted access, set the isEmergency flag to true."
					record.identifier = record.identifier
					currentDateTime = currentDateTime
				}
			}
		}
	}
}

Детализированная политика авторизации на основе времени

[ редактировать ]

Ниже приведен пример политики ABAC, реализованной с использованием ALFA. Он использует время как атрибут. Он использует условие XACML для сравнения атрибута currentTime со значением, представляющим 17:00 (выраженным в 24-часовом формате). Обратите внимание на использование :time для преобразования значения String в правильный тип данных.

rule allowAfter5pm{		
	permit
	condition currentTime > "17:00:00":time
}

Политики HL7

[ редактировать ]

Варианты использования

[ редактировать ]

HL7 определяет ряд вариантов использования контроля доступа в медицинских учреждениях , которые можно легко определить в ALFA.

Примеры политик ALFA для HL7

[ редактировать ]
Контроль доступа по категориям действий
[ редактировать ]

Реализации

[ редактировать ]

Расширение кода VS

[ редактировать ]

Бесплатное расширение для редактора VS Code, которое поддерживает завершение кода, подсветку синтаксиса, рефакторинг и навигацию по определению. Он также может скомпилировать ALFA в XACML 3.0. [ 6 ]

Плагин для Eclipse

[ редактировать ]

Плагин ALFA для Eclipse — это инструмент, который преобразует вашу среду программирования Eclipse в специальный редактор политик авторизации с использованием синтаксиса ALFA. Политики ALFA затем можно легко преобразовать в политики XACML 3.0 и загрузить в инструмент управления политиками XACML. [ 7 ]

  1. ^ Гебель, Джерри (16 июля 2012 г.). «Axiomatics выпускает бесплатный плагин для Eclipse IDE для разработки политик XACML3.0» . Аксиоматика . Проверено 31 мая 2017 г.
  2. ^ «Упрощение XACML — плагин Axiomatics ALFA для Eclipse IDE» . Куппингер Коул . Проверено 10 февраля 2017 г.
  3. ^ «XACML 3, раздел 4.2.3» (PDF) . ОАЗИС . Проверено 2 мая 2021 г.
  4. ^ https://www.linkedin.com/grp/post/3934718-5851696088934801412 . [ самостоятельный источник ]
  5. ^ https://www.identityserver.com/documentation/enforcer/alfa/QuickGuideToAlfa/
  6. ^ «АЛЬФА — Торговая площадка Visual Studio» . 10 сентября 2021 г.
  7. ^ «Как я могу использовать ссылки на политики в ALFA?» . 10 октября 2016 г.

Внешние ссылки

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 72e971ab9b1d0afac7fd91ddc51c9f07__1721133000
URL1:https://arc.ask3.ru/arc/aa/72/07/72e971ab9b1d0afac7fd91ddc51c9f07.html
Заголовок, (Title) документа по адресу, URL1:
Abbreviated Language for Authorization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)