Fork me on GitHub

.NetCore源码阅读笔记系列之Security (三) Authentication & AddOpenIdConnect

通过第二篇文章我们已经知道了授权的内部实现通过自定义的授权Handler来的,同样的道理

OpenIdConnect 同样是通过 OpenIdConnectHandler来请求授权的

那么它内部又是怎么来实现的呢?

接下来直接分析OpenIdConnectHandler的处理,如我们加了那么多参数:

 .AddOpenIdConnect(o =>
            {
                o.ClientId = "ClientId";
                o.ClientSecret ="Secret";
                o.Authority ="Authority" ;
                o.ResponseType = OpenIdConnectResponseType.CodeIdToken;
                o.GetClaimsFromUserInfoEndpoint = true;
});

在IdentityServer4认证服务端其实就是可以配置这些 clientid 等,AddOpenIdConnect 实际就是通过这种(OIDC)协议去发起远程请求认证,结合前面一章,其实还是通过IAuthenticationServices、IAuthenticationHandler里面去处理重写实现

HandleRequestAsync,而在HandleRequestAsync内部就是通过远程请求授权认证,下面来看这段

<!doctype html>
<html>
<head>
    <title>这里就是重新定向到身份提供者</title>
</head>
<body>
    <form name="form" method="post" action="{0}">
        {1}
        <noscript>单击完成授权: <input type="submit" /></noscript>
    </form>
    <script>document.form.submit();</script>
</body>
</html>

OpenIdConnect内部动态的根据参数拼凑了这样一段html代码并且直接提交执行,说道这里可能就会想到 在使用IdentityServer4的时候 其中的 302 跳转,其实就是动态的输出了这个页面,然后立即提交跳转到身份认证提供者

这里其中还要说的就是 SignOut的处理,在使用OIDC登录进行身份认证的时候,如果 Signout的时候需要 Signout 远程的身份提供者,同时如果这里有SSO登录,还要清除掉其他系统的登录信息,这里就要主动发起通知了,所以这里会有HandleSignOutCallback的处理,就是为了回调通知其他身份认证的应用,通知他们清除本地的身份认证退出,所以一般在使用OIDC登录身份认证的时候,一般还需要写Callback处理,具体可以参考前面的IdentityServer4相关文章

关于其中的Events事件就多说,无外乎就是外部需要对内部认证失败等等信息后续做的一些处理事件 

 

posted @ 2018-11-23 10:57  龙码精神  阅读(1768)  评论(0编辑  收藏  举报