添加对外部认证的支持

接下来我们将添加对外部认证的支持。这非常简单,因为你真正需要的是一个兼容ASP.NET Core的认证处理程序。

ASP.NET Core本身也支持Google,Facebook,Twitter,Microsoft帐户和OpenID Connect。此外,你可以找到很多其他的认证供应商实现在这里

cookies的作用

外部认证处理程序上的一个选项称为SignInScheme,例如:

services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = "scheme of cookie handler to use"; options.ClientId = "...";
options.ClientSecret = "...";
})

登录方案指定将暂时存储外部认证的结果的cookie处理程序的名称,例如 由外部提供商发送的身份单元。 这是必要的,因为在完成外部认证过程之前,通常会有几个重定向。

鉴于这是一种常见的做法,IdentityServer专门为此外部提供程序工作流程注册一个Cookie处理程序。 该方案通过IdentityServerConstants.ExternalCookieAuthenticationScheme常量表示。 如果您要使用我们的外部cookie处理程序,那么对于上面的SignInScheme,您将分配的值为IdentityServerConstants.ExternalCookieAuthenticationScheme常量:

services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme; options.ClientId = "...";
options.ClientSecret = "...";
})

您也可以注册您自己的自定义Cookie处理程序,如下所示:

services.AddAuthentication()
.AddCookie("YourCustomScheme")
.AddGoogle("Google", options =>
{
options.SignInScheme = "YourCustomScheme"; options.ClientId = "...";
options.ClientSecret = "...";
})

对于特定的场景,您还可以将外部Cookie机制短路,并将外部用户直接转发到主要Cookie处理程序。 这通常涉及在外部处理程序上处理事件,以确保从外部身份源执行正确的声明转换。

添加Google支持

为了能够使用Google进行身份验证,您首先需要向他们进行注册。这是在他们的开发者控制台完成的。创建一个新项目,启用Google+ API,并通过将/signin-google路径添加到您的基地址(例如http//localhost:5000/signin-google)来配置本地IdentityServer的回拨地址。

如果您在端口5000上运行 - 您可以简单地使用下面的代码片段中的客户端ID /密码,因为这是由我们预先注册的。

首先添加Google身份验证处理程序到DI。这是通过添加这个片段来ConfigureServices完成的Startup

public void ConfigureServices(IServiceCollection services)
{
// 使用内存存储,密钥,客户端和资源来配置身份服务器。
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())//添加api资源
.AddInMemoryClients(Config.GetClients())//添加客户端
.AddTestUsers(Config.GetUsers()) //添加测试用户
.AddInMemoryIdentityResources(Config.GetIdentityResources());//添加对OpenID Connect的支持
//注册mvc服务
services.AddMvc();
//添加Google登录
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com";
options.ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo";
});
}

默认情况下,IdentityServer专门为外部身份验证的结果配置cookie处理程序(基于常量的方案IdentityServerConstants.ExternalCookieAuthenticationScheme)。Google处理程序的配置然后使用该cookie处理程序。为了更好地理解如何完成,请参阅快速入门文件夹AccountController下的类。

现在运行访问http://localhost:5000/account/login- 您将在登录页面上看到一个Google按钮:

登录认证之后,您可以看到,这些声明现在来自Google数据。这里需要翻、墙,不然获取不到Google账号信息。

ASP.NET Core的身份认证框架IdentityServer4--(4)添加第三方快捷登录的更多相关文章

  1. ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端证书控制API访问

    前言 今天(2017-9-8,写于9.8,今天才发布)一口气连续把最后几篇IdentityServer4相关理论全部翻译完了,终于可以进入写代码的过程了,比较累.目前官方的文档和Demo以及一些相关组 ...

  2. ASP.NET Core的身份认证框架IdentityServer4(1)-特性一览

    IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.OpenID和OAuth 的区别请看 https://www.zhihu.com/ques ...

  3. ASP.NET Core的身份认证框架IdentityServer4(6)- 开始

    安装和概述 启动一个新的IdentityServer项目有两种基本方法: 从头开始 从Visual Studio中的ASP.NET身份模板开始 如果从头开始,我们提供了一些文档.项目帮助和内存存储支持 ...

  4. ASP.NET Core的身份认证框架IdentityServer4(5)- 包和构建

    包和构建 IdentityServer有许多nuget包 IdentityServer4 nuget | github 包含IdentityServer核心对象模型,服务和中间件. 仅支持内存配置和用 ...

  5. ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证

    OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...

  6. ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释

    IdentityServer4 术语 IdentityServer4的规范.文档和对象模型使用了一些你应该了解的术语. 身份认证服务器(IdentityServer) IdentityServer是一 ...

  7. ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问

    前言 本文及IdentityServer这个系列使用的都是基于.net core 2.0的.上一篇博文在API项目中我使用了icrosoft.AspNetCore.Authentication.Jwt ...

  8. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范

    IdentityServer实现以下规范: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 (sp ...

  9. ASP.NET Core的身份认证框架IdentityServer4--入门

    ASP.NET Core的身份认证框架IdentityServer4--入门 2018年08月11日 10:09:00 qq_42606051 阅读数 4002   https://blog.csdn ...

  10. ASP.NET Core的身份认证框架IdentityServer4--入门【转】

    原文地址 Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Cor ...

随机推荐

  1. zTree节点重叠或者遮挡

    ztree官网:http://www.treejs.cn/v3/api.php 问题:zTree节点重叠或者遮挡. 分析:由于zTree和bootstrap插件样式冲突导致的树重叠问题. 解决:设置z ...

  2. 顺序一致性内存模型与JMM的“顺序一致性”

    顺序一致性内存模型是一个被计算机科学家理想化了的理论参考模型,它为程序员提供了极强的内存可见性保证.顺序一致性内存模型有两大特性.1)一个线程中的所有操作必须按照程序的顺序来执行.2)(不管程序是否同 ...

  3. Centos硬盘IO性能检测命令iostat[转]

    Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...

  4. python_如何快速找打字典中公共key

    场景实例: 西班牙足球联赛,每轮球员进球统计: 第一轮:{'1':1,'2':4,'5':2,'7':3} 第一轮:{'2':1,'5':4,'6':2,'3':3} 第一轮:{'1':1,'4':4 ...

  5. 在Tomcat中配置单点登录

    单点登录:Single Sign-On .概述 一旦你设置了realm和验证的方法,你就需要进行实际的用户登录处理.一般说来,对用户而言登录系统是一件很麻烦的事情,你必须尽量减少用户登录验证的次数.作 ...

  6. 关于支付时rsa加密解密的函数

    <?php //加密 function _checkPadding($padding, $type) { if ($type == 'en') { switch ($padding) { cas ...

  7. JAVA中创建线程的三种方法及比较

    JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...

  8. MS SQL 事物日志传送能否跨数据库版本吗?

    SQL SERVER的事物日志传送(log shipping)功能,相信很多人都使用过或正在应用,这是MS SQL提供的一个非常强大的功能,一般需要一个主数据库服务器(primary/producti ...

  9. 【转】linux grep命令

    1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 2.格式 grep [options] 3.主要参数 [options]主要参数: - ...

  10. 【sed & awk 第二版笔记】以州和人名排列_P38

    [root@nhserver1 02]# cat listJohn Daggett, 341 King Road, Plymouth MAAlice Ford, 22 East Broadday, R ...