Skip to content

jnhaffey/IdentityServer4.Contrib.CosmosDB

Repository files navigation

IdentityServer4.Contrib.CosmosDb

Build & Release Statuses

Branch Build Status Release Status NuGet Package
Master Build status Deployment status NuGet
Development Build status Deployment status NuGet

CosmosDB persistence layer for IdentityServer4 based on the IdentityServer4.Contrib.MongoDb persistence layer.

General Setup and Use

appsettings.json

{
  "CosmosDb": {
    "EndPointUrl": "https://localhost:8081",
    "PrimaryKey": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
    "DatabaseName": "MyTestDatabase",
    "Collections":[
      {
        "CollectionName": "ApiResources",
        "ReserveUnits": 1000
      }
    ]
  }
}

EndPointUrl and PrimaryKey are required values.
DatabaseName and Collections are optional values. Within Collections Objects, CollectionName can only be one of the following:
• ApiResources
• Clients
• IdentityResources
• PersistedGrants

Startup.cs

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
        .AddJsonOptions(
            options =>
            {
                options.SerializerSettings.Converters.Add(new StringEnumConverter());
                options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            });

    services.AddIdentityServer(options =>
        {
            options.Events.RaiseSuccessEvents = true;
            options.Events.RaiseFailureEvents = true;
            options.Events.RaiseErrorEvents = true;
        })
        .AddConfigurationStore(Configuration.GetSection("CosmosDB"))
        .AddOperationalStore(Configuration.GetSection("CosmosDB"))
        .AddDeveloperSigningCredential()
        .AddExtensionGrantValidator<ExtensionGrantValidator>()
        .AddExtensionGrantValidator<NoSubjectExtensionGrantValidator>()
        .AddJwtBearerClientAuthentication()
        .AddAppAuthRedirectUriValidator()
        .AddTestUsers(TestUsers.Users);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime applicationLifetime)
{
    if (env.IsDevelopment())
        app.UseDeveloperExceptionPage();
    else
        app.UseHsts();

    app.UseIdentityServer();
    app.UseIdentityServerCosmosDbTokenCleanup(applicationLifetime);

    app.UseStaticFiles();
    app.UseHttpsRedirection();
    app.UseMvcWithDefaultRoute();
}