BizTalk Server 2010 R2 is part of Microsoft’s overall Azure Integration Strategy

It’s finally here folks! After much hand-wringing in the community over the future of BizTalk Server, Microsoft have continued their commitment to their premier on-premises integration platform and announced the release of BizTalk Server 2010 R2.

 

The main areas of improvement are:

  1.  Platform Support for Windows Server 8, SQL Server 2012 and Visual Studio 2011.

  2.  Improvements to the accelerator packs for HL7, HIPPA and SWIFT

  3.  Better adapter connectivity for DB2 and IBM systems

  4.  Performance improvements for batch processing, ordered send ports and scale-out host configurations.

  5.  Even tighter integration with the Windows Azure ServiceBus for cloud-scale integration solutions.

  6.  Changes to the licencing model to allow cloud-based hosting from a SPLA partner.

 

Fundamentally these aren’t big changes to the overall BizTalk Server platform, but it demonstrates an on-going commitment by Microsoft to on-premises integration solutions for customers that can’t (or wont) move their systems to the cloud in the future.

Further, by ensuring that BizTalk Server is 100% compatible with the Windows Azure ServiceBus (using the Azure relay & messaging bindings with the WCF adapter), Microsoft are positioning themselves really well for any combination of the following solutions:

  • Pure On-premises Integration
    • BizTalk Server
    • Windows Server AppFabric
  • Hybrid Integration
    • BizTalk Server
    • Windows Server AppFabric
    • Windows Azure AppFabric
  • Pure Cloud-based Integration
    • Windows Azure AppFabric

I think this is a really smart strategy by Microsoft, and those integration consultancies who play in this space would be wise to maintain their on-premises BizTalk expertise so they can deliver all three types of solutions to their customers.

I know we are.

Posted in Azure, BizTalk, Window Server AppFabric, Windows Azure AppFabric | No Comments »

Do you know about the Windows Azure Discovery Pack?

Mexia are currently deep-diving on the Windows Azure platform because, like Microsoft, we are “all in” with the cloud.

We know that the future of system integration will involve the cloud in one way or the other, and as integration specialists working with corporate & government clients, building Hybrid Integration Platforms using both Windows Azure AppFabric Middleware AND BizTalk Server is now our raison d’être.

image

However explaining the cloud to our customers has not been as easy as our decision to follow Microsoft into the cloud.

Interestingly, we’re finding that the main pushback isn’t technical because they generally already know that the cloud gives them immediate agility, better server utilisation and a managed infrastructure service.

The main resistance points that we’ve had are:

    1.  Perception of unquantifiable risks (information security, service uptime etc), which is tackled here.

    2.  Real unwillingness to uproot their business’ IT systems while everything is stable, which is tackled here.

    3.  Perception of unpredictable costs, which is tackled here.

The third & final resistance point is an interesting one, mainly because I genuinely think some of our customers genuinely LIKE buying servers and having control over their environments.  I think this is because provided they can quantify the expense of buying their own infrastructure (however high it is), and as long as they are still making money, why turn everything upside down and change the way they do things?

This is clearly bonkers, however, it’s one of the resistance points we face and we have to know how to deal with it.

Enter stage left the Windows Azure Discovery Pack!

image

As you can see it’s a current promotion by Microsoft that gives you a 6 month block of Azure hours for half-price, plus free training, plus free consulting (from Mexia or your preferred Windows Azure partner).

The website also says the offer expires June 30th 2012, but Microsoft’s effervescent Azure marketing specialist Margaret Synan explained to me that if you buy a DP before Xmas 2011, you’ll have time to purchase another one before the offer goes away.  This means you’ll have effectively locked in the 50% discounted Azure pricing for 12 months!

Talk about a way to quantify your Azure costs.

The Discovery Pack is really worth considering if Azure goodness is on your company roadmap for 2012 and you want to control your costs whilst you climb aboard the juggernaut!

Get it while it’s hot, and tell them Mexia sent you! Smile

Posted in Azure, Marketing, Mexia, Training, Windows Azure AppFabric | No Comments »

Windows Azure BizSpark StartUp Camp

If you’re an aspiring young Queensland company building a cloud-hosted service or product, then you could do far worse than to attend the Windows Azure BizSpark Startup Camp in Brisbane on 2-4th December 2011.

Mexia participated in the Melbourne event early 2011 and we loved every bit of it.  You get free Azure developer training, one-on-one developer mentoring from Azure MVP’s such as Steven Nagy, and advice on how to commercialise your idea.

If you’re a Microsoft BizSpark member you can also pitch your idea to a panel of investors & technical gurus, all of whom have real world experience launching technical products into the marketplace.

It doesn’t get much better considering the price, and I heartily recommend the investment of your time to go along.

Posted in Azure, Mexia, Training, Windows Azure AppFabric | No Comments »

OAuth Certificate Authentication with ACS

Summarises our experience authenticating callers with the Windows Azure AppFabric Access Control Service (ACS) using X.509 certificates.

Here’s the scenario. A consumer (Alice) wants to publish a message to the Azure AppFabric Service Bus, however before doing so, somehow needs to prove that she is in fact Alice. Taking a certificate based approach, requires Alice to craft a SAML token which among other things states “i’m Alice” (relying party scope), and signing this token with Alice’s (private key) certificate. If Alice were to deliver this token to ACS (https://yournamespace.accesscontrol.windows.net/v2/OAuth2-13), and a relying party, rule group and service identity with Alice’s public key had been configured, ACS in return would give Alice another token (a SWT token by default) signed with a specified signing key, which Alice could use from that point to prove identity.

In short, we are providing a token, with the intent of receiving another token in return. The token returned by ACS is potentially very powerful, and can be used to authorise access to resources in many downstream systems.

To establish this relationship between ACS and consumers, consumers need to have an X.509 certificate that uniquely represents them as the consumer. A self signed (makecert.exe) certificate in this instance is perfectly fine. Next the public key for this certificate needs to be exported (.cer) and provided to the ACS administrator. It’s important to note here that the private key (.pfx exports contain both the private and public keys) portion of the certificate should always be kept confidential. ACS only requires a consumers’ public key in order to verify their digital signature.

The OAuth sample in the OAuth2 folder for the Access Control Service Samples and Documentation contains many gems for doing this. Such as crafting SAML2 tokens, and populating the necessary OAuth HTTP headers, and so on.

This sample illustrates how to authenticate to Windows Azure AppFabric Access Control Service (ACS) using the OAuth 2.0 protocol by presenting a SAML token signed by an X.509 certificate. This certificate corresponds to a ServiceIdentity configured on ACS, and ACS issues a SWT with a nameidentifier claim of the ServiceIdentity. This SWT is used to authenticate to an OAuth 2.0 protected resource. This sample conforms to draft 13 of the OAuth 2.0 protocol.

When doing this for the first time, or when things don’t work out, its awesome to be able to inspect the HTTP conversations that take place with ACS. As you would expect, ACS enforces the use of SSL. SSL tunnels present a huge problem in terms of tracing. Fiddler fortunately comes to the rescue. Fiddler works by placing itself as a man-in-the-middle proxy between the client and server, as a result it also needs to provide a certificate for SSL requests. As this is not recognized as valid certificate, .NET throws an WebException at System.Net.HttpWebRequest.GetResponse() and no traffic shows up in Fiddler. To still be able to check accuracy of the programmatic requests with Fiddler, it is possible to directly add a new delegate, which always returns true, basically disabling certificate validation from deep within the framework libraries.

To get up and running with Fiddler and SSL tracing:

- Tools > Fiddler Options > HTTPS > Decrypt HTTPS Traffic

- Add this line of code to the .NET code responsible for transmitting the SAML token to ACS :

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

First attempt to run the code, I got a simple HTTP 400 back. Fiddler showed the following.

    HTTP/1.1 400 Bad Request
    Cache-Control: private
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.0
    Set-Cookie: ASP.NET_SessionId=mxla1kuojr1udh0u2sho21i0; path=/; HttpOnly
    X-AspNetMvc-Version: 2.0
    x-ms-request-id: 8718c3e7-a3ee-4cf0-af1f-951a09dfd9fe
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    X-Content-Type-Options: nosniff
    Date: Mon, 24 Oct 2011 05:27:12 GMT
    Content-Length: 1113

    {"error":"invalid_grant","error_description":"ACS50008: SAML token is invalid. ACS50006: Unable to verify token signature. The following signing key identifier does not match any valid registered keys: SecurityKeyIdentifier\r\n    (\r\n    IsReadOnly = False,\r\n    Count = 1,\r\n    Clause[0] = X509RawDataKeyIdentifierClause(RawData = RAW_DATA_GOES_HERE)\r\n    )\r\n. \r\nTrace ID: 8718c3e7-a3ee-4cf0-af1f-951a09dfd9fe\r\nTimestamp: 2011-10-24 05:27:13Z"}

ACS50006: Unable to verify token signature. The following signing key identifier does not match any valid registered keys. The error message spells it out. ACS could not find ANY valid certificates. Using the ACS Management Portal, go to Service identities, and drill into the identity of concern. If the status of the certificate is anything but valid (e.g. because its expired, etc) you will get this error. The certificates provided for the OAuth2 sample in the Access Control Service Samples (16 May 2011 update) all expired as of 16 Sep 2011, and will result in this exact error.

expired.cert

 

To get the samples working, I created my own self signed certificates.

makecert -r -pe -n "CN=mexia" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.3 -ss My

I then exported the public key portion (.cer) of the certificate, using the certificate manager MMC snap-in (certmgr.msc).

export.public.key

 

Using the ACS Management Portal, upload the exported “.cer” against the service identity.

If everything lined up, you should get a HTTP 200 containing a SWT token in return from ACS. An essence, a rather elegant alternative to using shared secrets to figure out who’s who.

    HTTP/1.1 200 OK
    Cache-Control: public, no-store, max-age=0
    Content-Type: application/json; charset=utf-8
    Expires: Mon, 24 Oct 2011 06:03:44 GMT
    Last-Modified: Mon, 24 Oct 2011 06:03:44 GMT
    Vary: *
    Server: Microsoft-IIS/7.0
    Set-Cookie: ASP.NET_SessionId=qz0cuqmk1nxt01wxehbqvq25; path=/; HttpOnly
    X-AspNetMvc-Version: 2.0
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    X-Content-Type-Options: nosniff
    Date: Mon, 24 Oct 2011 06:03:45 GMT
    Content-Length: 606

    {"access_token":"http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=OAuth2SampleX509Identity&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fbensimmonds.accesscontrol.windows.net%2f&Audience=https%3a%2f%2foauth2RelyingParty%2f&ExpiresOn=1319439825&Issuer=https%3a%2f%2fbensimmonds.accesscontrol.windows.net%2f&HMACSHA256=uaSF%2fojN%2f4SBQd5p1IYurRu0B5hc6Pdz4uC9ChvqFE4%3d","token_type":"http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0","expires_in":"3600","scope":"https://oauth2RelyingParty/"}

 

 

As an aside, the following error response was returned from ACS when using a self-signed certificate created with makecert using the following switches:

makecert -n "CN=mexia" -pe -ss my -sr LocalMachine -sky exchange -m 96 -a sha1 -len 2048
    makecert -n "CN=benjaminify" -pe -ss my -sr LocalMachine -sky exchange -m 96 -a sha1 -len 2048

    HTTP/1.1 400 Bad Request
    Cache-Control: private
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.0
    Set-Cookie: ASP.NET_SessionId=hxi2tbkn404lihcndxnuka35; path=/; HttpOnly
    X-AspNetMvc-Version: 2.0
    x-ms-request-id: 00dc92c8-9a72-4f0f-8b38-c5581a5cfcc5
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    X-Content-Type-Options: nosniff
    Date: Mon, 24 Oct 2011 05:56:55 GMT
    Content-Length: 286

    {"error":"invalid_grant","error_description":"ACS50008: SAML token is invalid. ACS50017: The certificate with subject \u0027CN=benjaminify\u0027 and issuer \u0027CN=Root Agency\u0027 failed validation. \r\nTrace ID: 00dc92c8-9a72-4f0f-8b38-c5581a5cfcc5\r\nTimestamp: 2011-10-24 05:56:55Z"}

Unlike the above working example, this will create a self-signed certificate associated with a issuer called “Root Agency”. ACS will spit the dummy (ACS50017) if the root issuer cannot be verified/trusted.

Posted in Azure, Windows Azure AppFabric | 1 Comment »

A Conceptual Understanding of Azure AppFabric ServiceBus Topics

I’ve been digging into the latest (Sept v1.5) release of Azure AppFabric ServiceBus recently and got caught up on some really simple (in hindsight) concepts that initially had me confused.

Being a BizTalk Server guy I was naturally trying to draw parallels with the pub-sub architecture of that product. This diagram from Paolo Salvatori’s blog post is as good as I’ve seen anywhere on all the moving parts involved in the Azure ServiceBus Topics, and with my annotations below in the curly brackets I managed to see how it relates conceptually to BizTalk.

 

Untitled

 

So based on this “ah-ha” moment I wanted to post my simple explanations in the hope it might help someone else learning this new platform.

Here are some simple definitions that I have found useful when designing solutions that use the new Azure AppFabric ServiceBus topics:

  • A topic is an Azure ServiceBus entity (that you define) to which clients publish their messages, based on the topic of conversation between any number of publishers and subscribers.  i.e. “SupplierInvoices”
  • The published message must be wrapped in the Microsoft.ServiceBus.Messaging.BrokeredMessage type before it gets sent to the topic, and can be any serialisable object you choose to send.  However the clients need to be able to deserialise & use the message, thus should know what to expect will be coming off the wire.  So the data type should be related to the “topic” of conversation. i.e.”InvoiceType”.
  • A subscription is like a pigeon-hole on the other end of the topic.  A copy of each and every message published to the topic is given to each and every subscription that’s been defined, and it is up to the subscription to execute it’s own rules to decide whether or not it will accept it.  i.e. “InvoicesFromNewSuppliers” and “InvoicesFromExistingSuppliers”
  • Message properties are a collection [IDictionary<String, Object>] of metadata values that can be populated by the publishing client.  These property values are used by the subscription rules to decide whether to accept the topic message or not. i.e. SupplierStatus = “New” or “SupplierStatus = “Existing”
  • A subscription rule has both a filter and action, and is the mechanism by why the subscription decides whether it wants to allow its copy of the topic message into it’s pigeonhole for clients to ultimately receive. i.e. the “InvoicesFromNewSuppliers” subscription would have the following rule filter expression “WHERE SupplierStatus = ‘New’”

There is obviously a LOT more complexity to the platform than the above simplistic definitions would suggest. However when explaining it to clients it helps to start with the basic concepts first.

Cheers,

Dean

NB: This obviously isn’t an “intro to” post. Try here and here for that type of information.

Posted in Azure, Windows Azure AppFabric | No Comments »