I wanted to provide a little more concrete example of what I have been talking 
about with the database changes needed for the passive STS. I have a prototype 
that is using a new database that I have named StonehengePasssiveSts. In the 
StonehengePassiveSts database I have created one table and populated it with 
some sample data.

 

Here is the create table statement from SQL Server Management Studio.

CREATE TABLE [dbo].[Users](
 [UserId] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
 [UserName] [nvarchar](50) NOT NULL,
 [EncryptedPassword] [varbinary] (500) NOT NULL,
 [PasswordSalt] [varbinary] (50) NOT NULL,
 [UserEmail] [nvarchar](250) NOT NULL,
 [FirstName] [nvarchar](50) NOT NULL,
 [LastName] [nvarchar](50) NOT NULL,
 [Address1] [nvarchar](250) NOT NULL,
 [Address2] [nvarchar](250) NULL,
 [City] [nvarchar](50) NOT NULL,
 [StateProvince] [nvarchar](50) NOT NULL,
 [PostalCode] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Users] ADD  CONSTRAINT [DF_Users_UserId]  DEFAULT (newid()) 
FOR [UserId]
GO


Here are some statements that I used to populate values for the first 3 users 
(uid:0, uid1, and uid2). (Note at this point the encrypted password and salt 
values are just place holders and will be replaced by real encrypted and salted 
versions of the xxx password later).

INSERT INTO dbo.Users(UserName, EncryptedPassword, PasswordSalt, UserEmail, 
 FirstName, LastName, Address1, City, StateProvince, PostalCode)
VALUES('User0', convert(varbinary (500), '<encryptedvalue>'), convert(varbinary 
(50), '<encryptedsalt>'), '[email protected]',
 'Sample', 'User0', '111 First Street', 'Redmond', 'WA', '98033')
GO

INSERT INTO dbo.Users(UserName, EncryptedPassword, PasswordSalt, UserEmail, 
 FirstName, LastName, Address1, City, StateProvince, PostalCode)
VALUES('User1', convert(varbinary (500), '<encryptedvalue>'), convert(varbinary 
(50), '<encryptedsalt>'), '[email protected]',
 'Sample', 'User1', '111 First Street', 'Redmond', 'WA', '98033')
GO

INSERT INTO dbo.Users(UserName, EncryptedPassword, PasswordSalt, UserEmail, 
 FirstName, LastName, Address1, City, StateProvince, PostalCode)
VALUES('User2', convert(varbinary (500), '<encryptedvalue>'), convert(varbinary 
(50), '<encryptedsalt>'), '[email protected]',
 'Sample', 'User2', '111 First Street', 'Redmond', 'WA', '98033')
GO


In the existing StockTraderDB database I added a new table that I named 
AccountStsUser. It has just an account ID and STS user ID. Here is the 
corresponding data.

AccountID StsUserId
1 9DF8E4CA-BB9F-46BB-8ACD-4D6F6872B37C
5 70F44ACF-E4D4-4153-B978-4740D0B1067F
11 8B32E49F-B52B-4E39-89A7-254F628ED170

 

I hope this makes our previous discussions on the STS and mapping STS users to 
an account ID (called profileID in the cookie) a little clearer.

 

With this table structure all STS implementations could use the same GUID to 
identify the user at the STS or each STS could come up with its own unique GUID 
and place that value in the StsUserId table. As long as there were no GUID 
colissions with different AccountID values then the code will work without 
problem.

 

Please let me know if you have any comments or concerns about these database 
changes.

 

Scott Golightly

Reply via email to