ASP.NET MVC SSO单点登录(Single Sign-On)是一种在多个应用程序中使用相同的身份验证凭据登录的方案。在这种方案中,用户只需一次登录,即可轻松访问所有相关的应用程序。
下面是ASP.NET MVC SSO单点登录设计与实现的完整攻略:
1. 认识 SSO 单点登录
单点登录是一种用户只需登录一个系统就可以实现多系统认证的场景。SSO 会在其他的应用程序中验证用户,以确保他们已经登录,从而让用户无需在每个应用程序中单独登录。
2. 安装与配置 IdentityServer4
- 安装
IdentityServer4
:
PM> Install-Package IdentityServer4 -Version 3.1.2
- 配置 IdentityServer4 服务:
services.AddIdentityServer(options =>
{
// 配置认证服务
options.Authentication.CookieLifetime = TimeSpan.FromHours(2);
})
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiScopes(Config.GetApiScopes())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddDeveloperSigningCredential();
3. 配置 API 服务
- 添加 NuGet 包:
IdentityServer4.AccessTokenValidation
。 - 配置认证服务:
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.Audience = "api";
});
- 配置授权策略:
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "api");
});
});
- 添加 Protect API:
[ApiController]
[Route("[controller]")]
[Authorize("ApiScope")]
public class WeatherForecastController : ControllerBase
{
// ...
}
4. 前端登录界面
- 使用
oidc-client
包实现登录:
import { UserManager } from 'oidc-client';
const userManager = new UserManager({
authority: 'http://localhost:5000',
client_id: 'web',
redirect_uri: 'http://localhost:8080/callback.html',
response_type: 'code',
scope: 'openid profile api',
post_logout_redirect_uri: 'http://localhost:8080/index.html',
});
async function signIn() {
await userManager.signinRedirect();
}
- 处理回调:
import { UserManager } from 'oidc-client';
const userManager = new UserManager({
authority: 'http://localhost:5000',
client_id: 'web',
redirect_uri: 'http://localhost:8080/callback.html',
response_type: 'code',
scope: 'openid profile api',
post_logout_redirect_uri: 'http://localhost:8080/index.html',
});
async function signInCallback() {
const user = await userManager.signinRedirectCallback();
console.log(user);
}
以上就是 ASP.NET MVC SSO单点登录的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC SSO单点登录设计与实现代码 - Python技术站