130 likes | 140 Views
This document provides a grammar for creating policies in a generic AAA environment. It covers object references, message types, policy evaluation, and driving policies using examples in various languages such as JavaScript and Perl. The document also discusses authentication, policy references, function calls, and exception handling.
E N D
AAAARCH Research Group A grammar for Policies in a generic AAA Environment <draft-ietf-aaaarch-generic-policy-01.txt> A. Taal G. Sliepen A.E. Hemel C.T.A.M. de Laat
Changes • References: AVPs --> Objects • AAA Message Types • No type checking
Object references • Request • Identity • PassW if ( Query = getPassword( userid = Request.Identity.UserID ) && Request.Identity.PassW == Query.PassW ) then( … ) else( … )
Request Service Reply • Answer • ServiceData // Action list A1 = getSwitchSettings( ) ; A2 = getConnectionList( ) ; A1. Connections = A2.Connections ; Reply.ServiceData.Settings = A1
A D B E Q S R A D B E P A Object trees Q D S B E R C leaf: int | float | string A.B = P A.B = K.L.M
AAA Message Types Authentication • Identity • AuthenticationData • Answer RequestReply ! One-to-one mapping Requests < ---> Driving Policies PolicyRef (remote AAA server): Reply = Authentication@ 146.50.0.23( Identity = Request.Identity, AuthenticationData = Request.AuthenticationData )
AAA Message Types Policy Evaluation RequestReply • PolicyReference • …….. • Answer • ServiceData A1 = PolicyEvaluation@ 146.50.0.23( PolicyReference = “policy_23” ) A2 = PolicyEvaluation@ 146.50.0.23( PolicyReference = “policy_117” ) ! A1.ServiceData A2.ServiceData
Local policy reference: PolicyRef versus FunctionCall PolicyRef: policy_71@ 127. 0.0.1( data1 = “Yes”, data2=12 ) policy_71@ localhost( data1 = “Yes”, data2=12 ) FunctionCall: evaluate( ref = “policy_71” , data1 = “Yes”, data2=12 )
No type checking ComputedBoolean: ( INT Request.Data.Bandwidth / INT Data.Fraction < 20 ) JavaScript: var a, b, c; a = 3; b = “yeah”; c = a / b; alert( “c=“+c); ==> c=NaN Perl: $a; $b; $c; $a = 3; $b = “yeah”; $c = $a / $b; ==> Illegal division …
Example Driving Policy KERBEROS Authentication: if ( if( exists Request.AuthenticationData.Protocol.Name ) then( ) else ( Reply.Answer.Type = MISSING_DATA ; Reply.Answer.Message = "Missing Protocol.Name" ) && if( Request.AuthenticationData.Protocol.Name == "Kerberos" ) then( ) else ( Reply = Authentication@146.50.0.23( Identity = Request.Identity, AuthenticationData = Request.AuthenticationData ) ) ) then ( // Next slide )
Example Driving Policy then ( // Action if ( exists Request.Identity.UserName && … ) then ( KRBReply = authenticate( username = Request.Identity.UserName, servername = … ) ; HE/SHE IS KNOWN!!!! Reply.Answer.AuthenticationData.SessionKey = KRBReply.SessionKey ; … ) else ( Reply.Answer.Type = MISSING_DATA ; Reply.Answer.Message = "AuthenticationData incomplete” ) ; ... ) else ( ... )
To do • AAA message types • Definition of top level objects • generic AAA functions • return trees • generic ASMs • return trees • pushed / pulled policy treatment
To do or to do not • Exception handling • Parallelism ( Actions, remote references )