« Blogging Engine Recommendations? | Main | BizTalk 2004 Null Send Adapter Sample »
Now, the BTS docs don't say flat out that SSO won't work with local accounts. In fact, one of the flags you can set when creating a new Affiliate Application especifies whether the application will support local accounts (SSO_FLAG_APP_ALLOW_LOCAL=0x00040000).
Once you graps the generals of creating new affiliate applications and mappings when SSO is installed on a domain environment, things get easy. However, I've never been able to quite get it to work with local accounts. Creating the affiliate applications usually works, it's creating the mappings that I've never gotten to work (except once, and I still can't seem to figure out what it was that I got right that one time...). I won't discuss the command line management (ssomanage.exe) and client tools (ssoclient.exe) simply because they will give you all sorts of weird unrelated errors, like "There's not enough storage space to complete the operation", instead, let us discuss the SSO API as provided by the Microsoft.BizTalk.SSOClient.Interop.dll assembly.
Creating a mapping programatically is actually easy. All you need to do is create an instance of ISSOMapping, fill in the required properties and call ISSOMapping::Create(). Then, you can set the credentials for the new mapping by using the SetExternalCredentialsMethod() of the ISSOMapper interface. Here's an example:
ISSOMapping mapping = new ISSOMapping(); mapping.ApplicationName = "MyApplication"; mapping.WindowsDomainName = "TheDomain"; mapping.WindowsUserName = "TheUser"; mapping.ExternalUserName = "The External User"; mapping.Create(0); ISSOMapper mapper = new ISSOMapper(); string[] xp = { "The Password" }; mapper.SetExternalCredentials ( "MyApplication", "The External User", ref xp );
The key point here in using local accounts is in how we would specify the necessary value needed for the WindowsDomainName property of the ISSOMapping interface. Here are some things I've tried:
The latter two choices are perhaps the most interesting ones, as they obviously seem to cause some processing to happen before they fail. This is made most evident by the fact that both will generate an entry into the machine's Security event log, with the following content:
Event Type: Failure Audit Event Source: Security Event Category: Logon/Logoff Event ID: 537 Date: 2/20/2005 Time: 9:56:22 PM User: NT AUTHORITY\SYSTEM Computer: RADIANT Description: Logon Failure: Reason: An error occurred during logon User Name: Domain: Logon Type: 3 Logon Process: Authz Authentication Package: Kerberos Workstation Name: RADIANT Status code: 0xC000005E Substatus code: 0x0 Caller User Name: BiztalkServices Caller Domain: RADIANT Caller Logon ID: (0x0,0x6BF76BC) Caller Process ID: 2520 Transited Services: - Source Network Address: - Source Port: -
The key point here to notice about the error is the fact that in the error description for the failuer, the SSO system (or, actually, the process making the ISSOMapping::Create() call) tries to do a NETWORK logon, except the user name and domain are, apparently, blank, and the underlying LogonUser() call (which I presume it's what they are doing) seems to have returned error code 0xC000005E, which happens to be STATUS_NO_LOGON_SERVERS ("There are currently no logon servers available to service the logon request"). No clue why this happens, though.
Has anyone found a way to get the SSO System to work with local accounts? And, if so, care to share what the secret is?
Syndicate
About
Tomas Restrepo is a software developer located in Colombia, South America. His interests include .NET, Connected Systems, PowerShell and lately dynamic programming languages. More...
email: tomas@winterdom.com msn: tomasr@passport.com
Ads
Links
Categories
Statistics
Blogroll
Post Archive
Other
Copyright © 2002-2008, Tomas Restrepo.
Powered by: newtelligence dasBlog 2.1.8139.823