zoukankan      html  css  js  c++  java
  • 08.IdentityServer4登录中心

    08.IdentityServer4登录中心

    IdentityServer就是一套Framework,实现了OAuth的授权

    理解OAuth流程,学会怎么使用他

    http://ruanyifeng.com/blog/2014/05/oauth_2_0.html

    客户端模式(client credentials)

    客户端模式,在使用微信支付或者支付宝支付的时候,会使用这种模式

    简单的实现一个IdentityServer

    首先新建webapi的项目

    在我的电脑D:MyDemosjesse下创建文件夹IdentityServerSample

    D:MyDemosjesseIdentityServerSample

    然后在这个文件夹下面打开dos窗体。创建webapi的项目

    dotnet new webapi --name IdentityServerCenter

    D:MyDemosjesseIdentityServerSampleIdentityServerCenter

    视频上用VScode打开的。 我还是用VS2017打开吧

    添加Nuget包

    Nuget安装包:IdentityServer4

    添加StartUp配置

    在MVC以前添加service配置

    引入命名空间 using IdentityServer4;

    配置添加到依赖注入里面

      services.AddIdentityServer()
                    .AddDeveloperSigningCredential();

    添加完依赖注入以后,要使用这个Identity

     //app.UseMvc();//这里我们暂时用不到MVC。这里先注释掉
     app.UseIdentityServer();

    然后我们在Program.cs里面

    设置启动地方为5000端口

    .UseUrls("http://localhost:5000")

    Config.cs类

     在根目录下创建 Config.cs文件

    这个类是我们暂时用来初始化IdentityServer的

    类里面我们会写一些静态方法

    这里返回一个Resource

    接下来定义Client客户端

    在给一个可以访问Resource,就是这个Client呢可以访问我们那些Resource

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using IdentityServer4.Models;
    
    namespace IdentityServerCenter
    {
        public class Config
        {
            public static IEnumerable<ApiResource> GetResource()
            {
                return new List<ApiResource>
                {
                    new ApiResource("api","My Api")
                };
            }
            public static IEnumerable<Client> GetClients()
            {
                return new List<Client>()
                {
                    new Client()
                    {
                        ClientId="client",
                        AllowedGrantTypes=GrantTypes.ClientCredentials,//最简单的模式
                        ClientSecrets={
                            new Secret("secret".Sha256())
                        },
                        AllowedScopes={ "api"}
                    }
                };
            }
    
        }
    }

    把我们的ApiResoure加入进来

    运行程序

    这里我先都注释掉

    这里没有添加mvc的管道也没有添加webapi

    webapi和mvc实际上一个管道。

    打开地址,什么也看不到

    http://localhost:5000/

    identityServer给我提供一个固定的地址:

    http://localhost:5000/.well-known/openid-configuration

    这里给我们一些基本的配置,基本的信息

    {
        "issuer": "http://localhost:5000",
        "jwks_uri": "http://localhost:5000/.well-known/openid-configuration/jwks",
        "authorization_endpoint": "http://localhost:5000/connect/authorize",
        "token_endpoint": "http://localhost:5000/connect/token",
        "userinfo_endpoint": "http://localhost:5000/connect/userinfo",
        "end_session_endpoint": "http://localhost:5000/connect/endsession",
        "check_session_iframe": "http://localhost:5000/connect/checksession",
        "revocation_endpoint": "http://localhost:5000/connect/revocation",
        "introspection_endpoint": "http://localhost:5000/connect/introspect",
        "device_authorization_endpoint": "http://localhost:5000/connect/deviceauthorization",
        "frontchannel_logout_supported": true,
        "frontchannel_logout_session_supported": true,
        "backchannel_logout_supported": true,
        "backchannel_logout_session_supported": true,
        "scopes_supported": [
            "api",
            "offline_access"
        ],
        "claims_supported": [],
        "grant_types_supported": [
            "authorization_code",
            "client_credentials",
            "refresh_token",
            "implicit",
            "urn:ietf:params:oauth:grant-type:device_code"
        ],
        "response_types_supported": [
            "code",
            "token",
            "id_token",
            "id_token token",
            "code id_token",
            "code token",
            "code id_token token"
        ],
        "response_modes_supported": [
            "form_post",
            "query",
            "fragment"
        ],
        "token_endpoint_auth_methods_supported": [
            "client_secret_basic",
            "client_secret_post"
        ],
        "subject_types_supported": [
            "public"
        ],
        "id_token_signing_alg_values_supported": [
            "RS256"
        ],
        "code_challenge_methods_supported": [
            "plain",
            "S256"
        ]
    }

    这里是支持的几种模式

    这里是加密的方式

    会暴露一些endpoint

    下一节课  我们要实现Resource。写一个API

  • 相关阅读:
    Web性能压力测试工具之WebBench详解
    Request Header Or Cookie Too Large
    手动删除SVCH0ST.EXE的方法
    微信非80端口网页授权
    微信公众号开发80端口映射解决方案 推荐
    解决微信访问 80 端口的限制问题
    Windows查看所有的端口及端口对应的程序
    Windows环境下,用netstat命令查看某个端口号是否占用
    价值观--我的总结
    价值是事物由人(基于自己的需要和获取的难度而)作出的评价而存在的属性
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10488919.html
Copyright © 2011-2022 走看看