• ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记


    任务16:oauth2 + oidc 实现 client部分

    实现 client 之前启动一下上一节的 server,启动之前需要清除一些代码

    注释 Program 的 MigrateDbContext

    public static void Main(string[] args)
    {
        BuildWebHost(args)
            //.MigrateDbContext<ApplicationDbContext>((context, services) => {
            //    new ApplicationDbContextSeed().SeedAsync(context, services)
            //    .Wait();
            //})
            .Run();
    }
    

    RegisterViewModel

    [Required]
    //[DataType(DataType.EmailAddress)]
    //public string Email{get;set;}
    public string UserName { get; set; }
    

    启动程序,使用 Config 中的 TestUser 登录

    登录成功,不过现在是在本地,接下来需要把它放到客户端里面

    新建一个 Asp.Net Core MVC 网站 MvcClient

    在 startup 的 ConfigureServices 中添加 Authentication

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
    
    
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
        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 = "client";
            options.ClientSecret = "secret";
            options.SaveTokens = true;
        });
    }
    

    在 startup 的 Configure 中的 UseMvc 前添加 Authentication

    app.UseAuthentication();
    

    在 Program 的 CreateWebHostBuilder 中配置 Urls

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUrls("http://localhost:5001")
                .UseStartup<Startup>();
    

    客户端设置为5001来启动,然后服务端设置为5000

    mvcCookieAuthSample 的 Program

    public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseEnvironment("Development")
                    .UseUrls("http://localhost:5000")
                    .UseStartup<Startup>()
                    .Build();
    

    修改服务端的 Config 配置跳转地址

    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
        {
            new Client()
            {
                ClientId = "client",
                AllowedGrantTypes = GrantTypes.Implicit,// 隐式模式
                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
    
                RedirectUris = { "http://localhost:5001/signin-oidc" },
                PostLogoutRedirectUris = { "http://localhost:5001/signout-callback-oidc" },
    
                //AllowedScopes = {"api"},
                AllowedScopes =
                {
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.OpenId,
                }
            }
        };
    }
    

    客户端的 Controller 打上 Authorize 标签

    [Authorize]
    public class HomeController : Controller
    

    修改客户端 launchSettings.json 中的 applicationUrl

    "applicationUrl": "http://localhost:5001",
    "sslPort": 0
    

    启动服务端,客户端,可以看到跳转到登录界面

    登录之后会跳转到 http://localhost:5001/

    在客户端 About.cshtml 页面显示 identity 的 claims

    @{
        ViewData["Title"] = "About";
    }
    <h2>@ViewData["Title"]</h2>
    <h3>@ViewData["Message"]</h3>
    
    @*<p>Use this area to provide additional information.</p>*@
    
    <dl>
        @foreach (var claim in User.Claims)
        {
            <dt>@claim.Type</dt>
            <dt>@claim.Value</dt>
        }
    </dl>
    

    启动程序,跳转之后,点击 About 进入 About 页面

    主要返回了服务端 Config 中配置的信息

    public static IEnumerable<IdentityResource> GetIdentityResources()
            {
                return new List<IdentityResource>
                {
                    new IdentityResources.OpenId(),
                    new IdentityResources.Profile(),
                    new IdentityResources.Email(),
                };
            }
    

    课程链接

    http://video.jessetalk.cn/course/explore

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

  • 相关阅读:
    Python面向对象详解
    使用树莓派搭建LoRaWAN网关并接入腾讯云物联网开发平台
    dajngo
    dajngo 项目目录结构调整
    Django
    nacos的简单使用
    MySQL数据库开发规范
    mabatis的sql标签
    直接插入100w数据报错
    大数据量插入到数据库
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12866453.html
Copyright © 2020-2023  润新知