码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Azure 应用服务】应用代码需要客户端证书进行验证,部署到App Service后,如何配置让客户端携带证书呢?


    问题描述

    .NET 6 MVC应用,代码中要求客户端访问时候必须携带正确的证书,如果不携带或者携带错误的证书,都会得到 HTTP ERROR 403 Forbidden 错误

    在App Service中,客户端访问不携带证书时的错误页面为

    在App Service中客户端访问携带了证书,但是证书验证失败的错误页面为

     

    问题解决

    在App Service的配置页面 (General Settings)中,可以开启Client Certificate Mode为Require(它的默认值为Ignore)。这样在第一次访问时候,客户端会要求从本地选择一个客户端证书。

    配置截图

     

    当访问App Service时,浏览器就会自动弹出选择证书窗口:

     

    代码参考

    验证客户端上传证书的 Thumbprints 的片段代码

    复制代码
    builder.Services.AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
            .AddCertificate(options =>
            {
                options.AllowedCertificateTypes = CertificateTypes.All;
    
                options.Events = new CertificateAuthenticationEvents
                {
                    OnCertificateValidated = context =>
                    {
                        string[] allowedThumbprints = {
                                    "9bded811e9852f3cb6b347529f78b1f4be5bcf50",
                                    "5d6d791a9284628203a5b3e238e5ee7448d57f2b",
                                    "41b3906fa93c50d2cce35132d8853fdf29d7d539",
                                    "3109b0222269b47cd8190252f5f1adb06751103a"
                        };
    
                        if (allowedThumbprints.Contains(context.ClientCertificate.Thumbprint.ToLower()))
                        {
                            context.Success();
                        }
                        else
                        {
                            context.Fail("Invalid certificate: " + context.ClientCertificate.Thumbprint);
                        }
                        return Task.CompletedTask;
                    },
                    OnAuthenticationFailed = context =>
                    {
                        context.Fail("Invalid certificate");
                        return Task.CompletedTask;
                    }
                };
            });
    复制代码

     

    参考资料

    Configure certificate authentication in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/certauth?view=aspnetcore-6.0

    CERTIFICATE AUTHENTICATION IN ASP.NET CORE 3.1:https://damienbod.com/2019/06/13/certificate-authentication-in-asp-net-core-3-0/

    Using Certificates For API Authentication In .NET 5: https://www.c-sharpcorner.com/article/using-certificates-for-api-authentication-in-net-5/

     

     
  • 相关阅读:
    使用Java接入小程序订阅消息!
    windows下载安装JavaJDK配置环境变量
    【C++】C++的类型转换
    胶片打印、排版、自助打印
    MIT 6.824 -- Cache Consistency -- 11
    万物皆可集成系列:低代码如何不成为数据孤岛
    速卖通测评自养号,国外环境如何搭建?需要多少成本?
    Dart笔记:stream_channel 包用法
    关于FFmepg的冷知识,这一篇就够了
    STM32合并烧录IAP+APP
  • 原文地址:https://www.cnblogs.com/lulight/p/15906335.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号