在 IdentityServer3 中使用 OpenID Connect OWIN 模块作为身份提供者
Using OpenID Connect OWIN module as an identity provider in IdentityServer3
我是 运行 IdentityServer3,在 asp.net v5 环境中。我正在尝试将 OWIN OpenID Connect 模块连接为身份提供者,以便用户可以使用本地凭据或从 Azure AD 实例联合的凭据通过 IDS3 登录。这是我的设置:
身份提供商配置:
public static void ConfigureIdentityProviders(IAppBuilder app, string signInAsType)
{
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = "a-valid-client-id",
Authority = "https://login.microsoftonline.com/some-valid-authority",
PostLogoutRedirectUri = "https://localhost:44300/",
SignInAsAuthenticationType = OpenIdConnectAuthenticationDefaults.AuthenticationType,
CallbackPath = new PathString("/identity/callback"),
ResponseType = "code id_token token"
});
}
IDS3 配置:
app.Map("/identity", idsrvApp =>
{
idsrvApp.UseIdentityServer(new IdentityServerOptions()
{
SiteName = "Identity Server",
SigningCertificate = LoadCertificate(),
AuthenticationOptions = new AuthenticationOptions()
{
IdentityProviders = ConfigureIdentityProviders
},
Factory = new IdentityServerServiceFactory()
.UseInMemoryUsers(Users.Get())
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(StandardScopes.All)
});
});
这部分工作正常,Azure returns 作为 POST 请求的指定端点的令牌。我收到以下错误:
{"Message":"The requested resource does not support http method 'POST'."}
我已经尝试了各种不同的重定向 URLs - 例如,重定向到“/”,重定向到“/identity”中的其他页面,并且总是得到相同的错误。我不确定我是否应该在回发 URL 上挂载一些资源来显式处理令牌,但我的印象是 OWIN 应该为我处理这个?
我开始认为这可能是我将 OWIN 中间件与 ASP.net 5 一起使用引起的问题。
谢谢!
问题是 Azure AD return将令牌发送到的重定向 URI 与在 OID 连接上配置的不一样。当这种不匹配发生时,return URL 上的 POST 没有任何监听,您会收到上述错误。
在此之后,我收到的下一个问题是 "Error identifying calling application",在 IDS3 中的令牌 return 端点上弹出。通过向 OID Connect 对象添加以下配置解决了这个问题:
TokenValidationParameters = new TokenValidationParameters
{
AuthenticationType = IdentityServer3.Core.Constants.ExternalAuthenticationType
}
我是 运行 IdentityServer3,在 asp.net v5 环境中。我正在尝试将 OWIN OpenID Connect 模块连接为身份提供者,以便用户可以使用本地凭据或从 Azure AD 实例联合的凭据通过 IDS3 登录。这是我的设置:
身份提供商配置:
public static void ConfigureIdentityProviders(IAppBuilder app, string signInAsType)
{
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = "a-valid-client-id",
Authority = "https://login.microsoftonline.com/some-valid-authority",
PostLogoutRedirectUri = "https://localhost:44300/",
SignInAsAuthenticationType = OpenIdConnectAuthenticationDefaults.AuthenticationType,
CallbackPath = new PathString("/identity/callback"),
ResponseType = "code id_token token"
});
}
IDS3 配置:
app.Map("/identity", idsrvApp =>
{
idsrvApp.UseIdentityServer(new IdentityServerOptions()
{
SiteName = "Identity Server",
SigningCertificate = LoadCertificate(),
AuthenticationOptions = new AuthenticationOptions()
{
IdentityProviders = ConfigureIdentityProviders
},
Factory = new IdentityServerServiceFactory()
.UseInMemoryUsers(Users.Get())
.UseInMemoryClients(Clients.Get())
.UseInMemoryScopes(StandardScopes.All)
});
});
这部分工作正常,Azure returns 作为 POST 请求的指定端点的令牌。我收到以下错误:
{"Message":"The requested resource does not support http method 'POST'."}
我已经尝试了各种不同的重定向 URLs - 例如,重定向到“/”,重定向到“/identity”中的其他页面,并且总是得到相同的错误。我不确定我是否应该在回发 URL 上挂载一些资源来显式处理令牌,但我的印象是 OWIN 应该为我处理这个?
我开始认为这可能是我将 OWIN 中间件与 ASP.net 5 一起使用引起的问题。
谢谢!
问题是 Azure AD return将令牌发送到的重定向 URI 与在 OID 连接上配置的不一样。当这种不匹配发生时,return URL 上的 POST 没有任何监听,您会收到上述错误。
在此之后,我收到的下一个问题是 "Error identifying calling application",在 IDS3 中的令牌 return 端点上弹出。通过向 OID Connect 对象添加以下配置解决了这个问题:
TokenValidationParameters = new TokenValidationParameters
{
AuthenticationType = IdentityServer3.Core.Constants.ExternalAuthenticationType
}