This is a two part issue that resolves around a single objective: Get DynamoDB to work with ServiceStack (particularly, as a Session State Provider, and as an Authentication Provider).
..:: Requirements ::..
What I must do:
- Use DynamoDB for Session & Credentials Management (an ASP.NET Identity 2.0 implementation)
- Use ServiceStack 4.0.32 Authentication for 3rd party Federation Identity support
- Get everything to work on a single web server (either in parallel or co-operatively)
What I have:
- Amazon Web Services DLL for Session Management (DynamoDBSessionStoreProvider)
- Custom ASP.NET Identity 2.0 Implementation for DynamoDB
- ServiceStack 4.0.32 license and working example of 3rd party Federation
..:: Session State ::..
I am using a DynamoDBSessionStoreProvider as per the Amazon Documentation.
This works fine as a web.Config solution until I try to use it with Service Stack, which wires Session Providers up in code:
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[] {
new CredentialsAuthProvider(appSettings),
new BasicAuthProvider(appSettings)
}));
I understand that CustomUserSession should inherit from AuthUserSession and override methods of interest as indicated in the ServiceStack SocialBootstrapAPI documentation, but first I tried to access the DynamoDBSessionStateStore directly:
Plugins.Add(new AuthFeature(
() => new DynamoDBSessionStateStore(),
new IAuthProvider[] {
new CredentialsAuthProvider(appSettings),
new BasicAuthProvider()
}));
Obviously, this is an issue since DynamoDBSessionStateStore does not implement ServiceStack's IAuthProvider nor inherit from their AuthUserSession concrete implementation. However, this is ultimately what I want.
So, I'm now back to my CustomUserSession, which extends AuthUserSession, but I am having issues getting exposure of DynamoDBSessionStateStore in the way ServiceStack expects.
What is going on is that ServiceStack is creating its own session cookies ss-pid while the custom session provider I've developed is using the .NET Identity session. So, my question is this; given the latest ServiceStack 4.0.32 updates, should I conform my custom provider to use ss-pid or should I somehow get ServiceStack to recognize my custom provider via implementation of AuthUserSession?
..:: Authentication ::..
I am using a custom ASP.NET Identity 2.0 implementation (a full Microsoft.AspNet.Identity implementation) for DynamoDB based strongly on this project found on codeplex. I've made a number of alterations, but the core is basically the same.
The implementation makes use of the IdentityUser, IdentityRole, IdentityUserClaim, and IdentityCloudContext, etc. portions of Identity 2.0 and wraps them into a UserStore and RoleStore.
My question is mostly in regards to the ServiceStack 4.0.32 updates. How should I get these two elements to play together? How can I make the UserStore and RoleStore play nice with ServiceStack Authentication? Implement a series of IAuthProviders?
Perhaps @mythz or someone else in the ServiceStack community will make use of the same DynamoDB ASP.NET Identity 2.0 implementation to start a collective (ServiceStack sanctioned) development project path that we all can agree on and contribute to.