zoukankan      html  css  js  c++  java
  • 使用IdentityServer4,在一个ASPNetCore项目中,配置oidc和api的AccessToken两种认证授权

    1.配置两种认证方式

        JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
                services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
    
                .AddCookie("Cookies")
                .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = "Cookies";
                    options.Authority = GZSetting.ApiAuthIp;
                    options.RequireHttpsMetadata = false;
                    options.ClientId = GZSetting.MvcClientId;
                    options.ClientSecret = GZSetting.ClientSecret;
                    options.ResponseType = "code id_token";
                    options.Scope.Clear();
                    options.Scope.Add("openid");
                    options.Scope.Add(GZSetting.ApiName);
                    //options.Scope.Add("roles");
                    options.SaveTokens = true;
                    options.GetClaimsFromUserInfoEndpoint = true;
    
                    options.ClaimActions.MapUniqueJsonKey("role", "role");
    
                })
                    .AddIdentityServerAuthentication("Bearer", options =>
                     {
                         options.RequireHttpsMetadata = false;
                         options.Authority = GZSetting.ApiAuthIp;
                         options.ApiName = GZSetting.ApiName;
                     });

    2.配置授权策略

     services.AddAuthorization(option =>
                {
                    //默认 只写 [Authorize],表示使用oidc进行认证
                    option.DefaultPolicy = new AuthorizationPolicyBuilder("oidc").RequireAuthenticatedUser().Build();
    //ApiController使用这个  [Authorize(Policy = "ApiPolicy")],使用jwt认证方案
                    option.AddPolicy("ApiPolicy", policy =>
                    {
                        policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);
                        policy.RequireAuthenticatedUser();
                    });
                });

    3.给Webapi的控制器添加授权标签

        [Authorize(Policy = "ApiPolicy")]
        [Route("api/[controller]/[action]")]
        [ApiController]
        public class TestInfoController : ControllerBase

     4.如果一个控制器要求Jwt认证或OpenId认证(当在普通控制器中写Api接口时,就需要这样写)

    [Authorize(AuthenticationSchemes = "Bearer,Cookies")]
    public class KeyValueStoresController : Controller

     

  • 相关阅读:
    Visual Studio 2013各个版本密钥(亲测可用)
    Duilib bkimage 属性
    VC++ 文件夹的打开
    孙鑫- VC++在对话框程序中让对话框捕获WM_KEYDOWN消息
    OpenCV窗口置顶的方法
    OpenCV设置感兴趣区域(roi)
    Ubuntu 12,04安装ROS Hydro
    VC获取任务栏窗口及其子窗口句柄
    关于调用静态链接库LIB,提示重定义或库冲突的错误
    DuiLib如何禁用双击标题栏窗口最大化
  • 原文地址:https://www.cnblogs.com/xiaoti/p/10118930.html
Copyright © 2011-2022 走看看