microsoft/migrating-owin-openid-connect
> Migrates legacy OWIN OpenID Connect authentication (Microsoft.Owin.Security.OpenIdConnect) to ASP.NET Core OpenID Connect (Microsoft.AspNetCore.Authentication.OpenIdConnect). Use ONLY when Microsoft.Owin.Security.OpenIdConnect has been flagged as obsolete or deprecated and must be replaced — not for version-bump scenarios where Microsoft.Owin.Security.OpenIdConnect is still supported.
npx skills add https://github.com/microsoft/upgrade-agent-plugins --skill migrating-owin-openid-connect
Migrate OWIN-based OpenID Connect authentication to ASP.NET Core. The main change is replacing OWIN middleware registration and notification callbacks with the ASP.NET Core AddOpenIdConnect() builder pattern and strongly-typed events. Cookie authentication must be explicitly paired because ASP.NET Core does not implicitly manage session cookies for OpenID Connect.
<PackageReference Include="Microsoft.Owin.Security.OpenIdConnect" Version="{old-version}" />
<PackageReference Include="Microsoft.Owin.Security.Cookies" Version="{old-version}" />
<PackageReference Include="Microsoft.Owin" Version="{old-version}" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="{version}" />
The cookie authentication middleware is included in the ASP.NET Core shared framework and does not require a separate package reference.
Migration Progress:
- [ ] Step 1: Detect OWIN OpenID Connect usage
- [ ] Step 2: Update project file references
- [ ] Step 3: Replace middleware registration
- [ ] Step 4: Migrate options and notification callbacks
- [ ] Step 5: Build and verify
Scan the project for:
using Microsoft.Owin.Security.OpenIdConnect; statementsapp.UseOpenIdConnectAuthentication(...) callsOpenIdConnectAuthenticationOptions configurationNotifications property assignments (SecurityTokenValidated, AuthorizationCodeReceived, etc.)Remove old OWIN packages and add the ASP.NET Core package (see "Package Reference Changes" above).
Replace the OWIN middleware setup with ASP.NET Core service registration:
// Old: OWIN Startup.Auth.cs
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { ... });
// New: ASP.NET Core Program.cs / Startup.cs
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options => { /* see Step 4 */ });
Pair AddOpenIdConnect() with AddCookie() — ASP.NET Core requires explicit cookie auth for session management after the OpenID Connect handshake.
| OWIN (Old) | ASP.NET Core (New) |
|------------|-------------------|
| OpenIdConnectAuthenticationOptions | OpenIdConnectOptions |
| options.ClientId | options.ClientId (same) |
| options.Authority | options.Authority (same) |
| options.RedirectUri | options.CallbackPath (relative path, not absolute URI) |
| options.PostLogoutRedirectUri | options.SignedOutCallbackPath |
| options.Notifications | options.Events |
| Notifications.SecurityTokenValidated | Events.OnTokenValidated |
| Notifications.AuthorizationCodeReceived | Events.OnAuthorizationCodeReceived |
| Notifications.RedirectToIdentityProvider | Events.OnRedirectToIdentityProvider |
| Notifications.AuthenticationFailed | Events.OnAuthenticationFailed |
Callback context types also change — update parameter types in event handlers:
// Old
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = context => { /* SecurityTokenValidatedNotification */ }
};
// New
Events = new OpenIdConnectEvents
{
OnTokenValidated = context => { /* TokenValidatedContext */ }
};
dotnet build
ASP.NET Core uses CallbackPath (a relative path like /signin-oidc) rather than a full redirect URI. Update the identity provider's registered redirect URI to match the application's base URL plus the callback path.
If users are redirected in a loop after authentication, AddCookie() is likely missing. ASP.NET Core requires explicit cookie auth to persist the session after the OpenID Connect handshake.
The event context types changed between OWIN and ASP.NET Core. Replace OWIN notification parameter types with the corresponding ASP.NET Core context types (e.g., TokenValidatedContext instead of SecurityTokenValidatedNotification).
Take microsoft/migrating-owin-openid-connect from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.