28 de enero de 2012

API fluent para configurar Windows Azure ACS

La versión en inglés de este post puede ser encontrada en http://blogs.southworks.net/jrowies/2012/01/28/fluent-api-for-setting-up-windows-azure-acs/

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 :)

2 comentarios:

  1. Jorge,

    I have made some updates that I would like to contribute to FluentACS. You don't have an email address attached to your github page, so I figured maybe you'd get this message here. Can you give me access to the repository? Here is my profile page: https://github.com/ryano144

    Thanks,
    Ryan Gross

    ResponderEliminar
  2. Hi Ryan, thanks for your interest. You could fork the repo and then send me a pull request, I think that would be the best way to do this. You can find me on twitter at @jrowies too. Thanks!

    ResponderEliminar