Olá.
Eu sei que não é correto nem permitido vir pedir código, o problema é que eu realmente não tenho idéia como fazer com isso, nunca mechi em corba e mecho muito pouco com java, então se alguém puder me dar uma luz agradeceria muito.
Então vamos lá:
Tenho que fazer uma coisa simples, uma transação entre um sistema cliente e um servidor, e isso deve ser mostrado, essa transação é a autenticação de senha, que pode estar num arquivo TXT, o importante é mostrar que o cliente e o servidor se comunicam, para isso tenho que usar essas extruturas de IDL.
Cada usuário é identificado através da estrutura “Principal”, que contém nome-deusuário,
senha e uma lista dos papéis atribuídos ao usuário. O serviço irá trabalhar com uma
lista desses usuários
struct Principal {
string security_name; // e.g., login
string auth_data; // e.g., password
RoleList roles; // e.g., student, researcher, teacher
};
typedef sequence<Principal> PrincipalList;
Definem-se também os atributos de segurança que irão fazer parte do certificado
gerado com a autenticação
struct SecurityAttribute {
string name; // e.g., security_name
string value; // e.g., usuário1
};
typedef sequence<SecurityAttribute> SecurityAttributeList;
O serviço de segurança deve ter a definição de todos os possíveis direitos que um
usuário pode ter. Observe que pode-se definir os direitos referentes a: receber
informação, atribuir informação, gerenciar e usar em um mesmo direito de acesso. Assim,
podemos definir vários níveis de acesso para um mesmo recurso com direitos diferentes.
struct Right {
// e.g., security_name:usuário1, role:student
SecurityAttributeList attribute_list;
CORBA::Identifier operation_name;
CORBA::RepositoryId interface_name;
// css:gsmu (get,set,manage and use)
string rights;
};
typedef sequence<Right> RightList;
Temos também a definição de credenciais ,que são o próprio certificado
e são compostas de uma lista de atributos de segurança, estes definidos anteriormente.
struct Credentials {
// The minimal attributes are id, security_name, creation_time,
// expiry_time and roles.
// e.g., id:[telefone removido]
// security_name:john
// creaton_time:12332
// expiry_time:23234
// role:student
// role:researcher
SecurityAttributeList attributes;
};
typedef sequence<Credentials> CredentialsList;
Para realizar a autenticação o serviço de segurança deve receber o nome-de-usuário, a
senha e retornar o certificado, que será utilizado pelo cliente para realizar todas as transações
daí em diante e até que esta tenha expirado
interface PrincipalAuthenticator {
AuthenticationStatus authenticate(
in string security_name,
in string auth_data,
out Credentials creds
);
Credentials copy(in Credentials cred);
boolean is_valid(in Credentials cred, out long long expiry_time);
boolean refresh(in Credentials cred, in long long expiry_time);
void destroy(in Credentials cred);
};
A decisão de acesso é feita usando-se com base nos certificados existentes e seus
direitos e no certificado mostrado pela entidade que está fazendo a chamada
interface AccessDecision {
readonly attribute RightList current_rigths;
boolean access_allowed(
in CredentialsList cred_list,
in Object target,
in CORBA::Identifier operation_name,
in CORBA::RepositoryId target_interface_name
);
};