1 什么是OIDC
OIDC 是对OpenID Connect 的检查,OIDC=(Identity ,Autjentication)+OAuth 2.0.
博文参考:https://www.cnblogs.com/linianhui/p/openid-connect-core.html
2 创建一个MVC 客户端
授权服务端采用之前的服务端 (代码已经上传,点击下载) 服务中心项目为 IdentityServer.ServerMVC
2.1.1新建一个 ASP.NET Core 网站 IdentityServer.ClientMVC,选择不要授权Authentication。
2.1.2修改Satrtup.cs
文件中的 ConfigureServices
方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "http://localhost:5000";//授权服务中心
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";//授权服务分配的ClientId
options.SaveTokens = true;
});
}
-
AddAuthentication
注入授权服务到容器中,用Cookie 作为验证用户的方法(通过Cookies设置于为DefaultScheme). - 设置
DefaultChallengeScheme
为oidc,因为在用户登录时,使用OpenID Connect 的防范。 - 使用
AddCookie
添加为处理Cookie 的程序。 -
AddOpenIdConnect
用来配置OpenID Connect协议的处理程序。
同处修改 Configure
方法,将授权加入中间件。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseAuthentication();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
2.1.3 在需要认证登录的控制器或者Action加入Authorize
标签。
在视图中加入如下代码,展示授权信息
<dl>
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
</dl>
原文文档:https://identityserver4.readthedocs.io/en/release/quickstarts/3_interactive_login.html