欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

程序员文章站 2023-04-05 09:43:13
前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) "简化模式( implicit )" "密码模式(resource owner password) credentials)" "客户端模式(client_credentials)" ......

前言

oauth 2.0默认四种授权模式(granttype)

  • 授权码模式(authorization_code)

本章主要介绍简化模式(implicit)
,不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

认证步骤

  • 客户端携带客户端标识以及重定向uri到授权服务器;
  • 用户确认是否要授权给客户端;
  • 授权服务器得到许可后,跳转到指定的重定向地址,并将令牌也包含在了里面;
  • 客户端不携带上次获取到的包含令牌的片段,去请求资源服务器;
  • 资源服务器会向浏览器返回一个脚本;
  • 浏览器会根据上一步返回的脚本,去提取在c步骤中获取到的令牌;
  • 浏览器将令牌推送给客户端。

配置认证授权服务器

package

pm> install-package identityserver4 -version 2.5.3

创建一个类config(配置要保护的资源,和可以访问的api的客户端服务器)

    public class config
    {
        /// <summary>
        ///     定义身份资源
        /// </summary>
        /// <returns></returns>
        public static ienumerable<identityresource> getidentityresources()
        {
            return new list<identityresource>
            {
                new identityresources.openid(),
                new identityresources.profile(),
                new identityresources.email()
            };
        }
        /// <summary>
        ///     定义授权客户端
        /// </summary>
        /// <returns></returns>
        public static ienumerable<client> getclients()
        {
            return new list<client>
            {
                new client{
                clientid="mvc",
                clientname="myclient",
                allowedgranttypes=granttypes.implicit,
                redirecturis = { "http://localhost:5003/signin-oidc" },//跳转登录到的客户端的地址
                 postlogoutredirecturis = { "http://localhost:5003/signout-callback-oidc" },//跳转登出到的客户端的地址
                allowedscopes = new list<string>
                {
                    identityserverconstants.standardscopes.openid,
                    identityserverconstants.standardscopes.profile,
                    identityserverconstants.standardscopes.email
                 },
                requireconsent=false
                }
            };

        }



    }
配置startup

再走到configureservices方法注入identityserver4服务

 services.addidentityserver()
                .adddevelopersigningcredential()
                .addinmemoryidentityresources(config.getidentityresources())
                .addinmemoryclients(config.getclients())
                .addtestusers(testusers.users);

在configure方法中添加identityserver4服务中间件

app.useidentityserver();

新建客户端

配置startup

再走到configureservices方法注入identityserver4服务

        jwtsecuritytokenhandler.defaultinboundclaimtypemap.clear();
            services.addauthentication(options =>
            {
                options.defaultscheme = "cookies";
                options.defaultchallengescheme = "oidc";
            })
      .addcookie("cookies")
      .addopenidconnect("oidc", options =>
      {
          options.authority = "http://localhost:5004";
          options.requirehttpsmetadata = false;

          options.clientid = "mvc";
          options.savetokens = true;
          options.getclaimsfromuserinfoendpoint = true;
      });

在configure方法中添加认证服务中间件

app.useauthentication();

run

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

添加第三方快捷登录(github)

在授权服务器configureservices注入
直接贴代码吧

        public void configureservices(iservicecollection services)
        {
            services.addmvc();
            services.addidentityserver()
                .adddevelopersigningcredential()
                .addinmemoryidentityresources(config.getidentityresources())
                .addinmemoryclients(config.getclients())
                .addtestusers(testusers.users);

            services.addauthentication().addgithub(options =>
            {
                options.signinscheme = identityserverconstants.externalcookieauthenticationscheme;
                options.clientid = "your client";
                options.clientsecret = "your secret";
             
            });

        }

run

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

登录成功后可以获取到声明的claimsidentity

页面大家可以通过 https://github.com/identityserver/identityserver4.templates进行下载
,或者通过命令dotnet new -i identityserver4.templates进行下载

github 可以到

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录

注册完应用就会有应用编码和密钥了

概要

参考:
demo:https://github.com/fhcodegit/identityserver4.samples/tree/master/quickstarts/implicitflowauthentication