Durante los últimos meses he estado trabajando para la gente de p&p de Microsoft, desarrollando la aplicación de ejemplo para una nueva guía acerca de la integración de aplicaciones híbridas en Windows Azure.
Uno de los componentes de la solución de ejemplo es una aplicación de consola que realiza todos los pasos requeridos para tener los namespaces de ACS y Service Bus correctamente configurados. Esta aplicación usa una serie de wrappers alrededor de la API de management de ACS.
Mientras que esto es un gran paso en dirección de simplificar la vida del desarrollador, luego de mirar el código resultante me di cuenta que mi vida se podría haber simplificado aún más. Esa es la razón por la cual decidí invertir algo de mi tiempo desarrollando una API fluent para configurar los namespaces de ACS.
Así es como se ve la API:
var namespaceDesc = new AcsNamespaceDescription( "somenamespace", "ManagementClient", "T+bQtqP21BaCLO/8D1hanRdKJF8ZYEV8t32odxP4pYk="); var acsNamespace = new AcsNamespace(namespaceDesc); acsNamespace .AddGoogleIdentityProvider() .AddServiceIdentity( si => si .Name("Vandelay Industries") .Password("Passw0rd!")) .AddRelyingParty( rp => rp .Name("MyCoolWebsite") .RealmAddress("http://mycoolwebsite.com/") .ReplyAddress("http://mycoolwebsite.com/") .AllowGoogleIdentityProvider() .SwtToken() .TokenLifetime(120) .SymmetricKey( Convert.FromBase64String("yMryA5VQVmMwrtuiJBfyjMnAJwoT7//fCuM6NwaHjQ1=")) .AddRuleGroup(rg => rg .Name("Rule Group for MyCoolWebsite Relying Party") .AddRule( rule => rule .Description("Google Passthrough") .IfInputClaimIssuer().Is("Google") .AndInputClaimType().IsOfType(ClaimTypes.Email) .AndInputClaimValue().IsAny() .ThenOutputClaimType().ShouldBe(ClaimTypes.Name) .AndOutputClaimValue().ShouldPassthroughFirstInputClaimValue()) .AddRule( rule => rule .Description("ACS rule") .IfInputClaimIssuer().IsAcs() .AndInputClaimType().IsAny() .AndInputClaimValue().IsAny() .ThenOutputClaimType().ShouldPassthroughFirstInputClaimType() .AndOutputClaimValue().ShouldPassthroughFirstInputClaimValue()))); acsNamespace.SaveChanges(logInfo => Console.WriteLine(logInfo.Message));
Pueden encontrar más información en el repositorio del proyecto en github.
Ah, y por favor no olviden pegarle una mirada a la guía sobre integración de aplicaciones híbridas cuando la misma esté disponible (se puede ir descargando un borrador desde aquí), estos muchachos están haciendo un trabajo increíble !
Eso es todo, espero que sea útil :)