栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.NET 6 OAuth2.0 IdentityServer4 4.X版本

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.NET 6 OAuth2.0 IdentityServer4 4.X版本

.NET Core OAuth IdentityServer4 AllowAnonymous Policy 白名单 .NET 5 IdentityServer4 4.X版本
jwt.io
最小 API 概述
使用 ASP.NET Core 创建最小 Web API

1、Program.cs

using AuthService;
using AuthService.CoreLibrary;
using AuthService.Filters;
using System.Data;
using System.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");

string[] address = builder.Configuration["AppSettings:CorsAddress"].Split(',');
string[] port = builder.Configuration["AppSettings:CorsPort"].Split(',');

builder.Services.Configure(builder.Configuration.GetSection("RedisOptions"));
RedisOptions redisOptions = new RedisOptions();
builder.Configuration.Bind("RedisOptions", redisOptions);
string host = redisOptions.Host;
string port = redisOptions.Port;

//加载自定义配置文件
var config = builder.Host.ConfigureAppConfiguration((hostingContext, config) =>
{
    config.AddJsonFile("CustomConfig.json", optional: true, reloadOnChange: true);
});
//读取 CustomConfig.json 文件 SmtpServer 配置项
var smtp = builder.Configuration["SmtpServer"];

#region 数据库 EF Core
builder.Services.AddDbContext(options =>
  options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
#endregion

#region 数据库 Dapper
string dbType = builder.Configuration["DbSql:DbType"];
switch (dbType)
{
    case "SqlServer":
        //builder.Services.AddSingleton(builder.Configuration.GetConnectionString("DefaultConnection"));
        builder.Services.AddSingleton(builder.Configuration["DbSql:SqlServerConnection"]);
        break;
    default:
        break;
}

builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton();
#endregion

#region
builder.Services.AddIdentityServer(options => { })
    .AddDeveloperSigningCredential()
    .AddInMemoryClients(AuthService.Security.Clients.GetClients())
    .AddInMemoryIdentityResources(AuthService.Security.IdentityConfig.GetIdentityResources())
    .AddInMemoryApiResources(AuthService.Security.IdentityConfig.GetResources())
#region ids4 4.X 新特性 
    .AddInMemoryApiScopes(AuthService.Security.IdentityConfig.GetScopes())
    //.AddInMemoryApiScopes(Security.IdentityConfig.ApiScopes)
#endregion
    .AddProfileService()
    .AddResourceOwnerValidator();
#endregion

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

#region 跨域访问
string AllowSpecificOrigins = "AllowSpecificOrigins";
var urls = StringPlus.GetCors(address, port);
builder.Services.AddCors(options =>
{
    options.AddPolicy(AllowSpecificOrigins, builder =>
    {
        builder.WithOrigins(urls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();
    });
});
#endregion

builder.Services.AddControllers(options =>
{
    options.Filters.Add(typeof(CustomExceptionFilter));
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

var summaries = new[]
{
    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapGet("/", () => "Hello World!");

app.MapGet("/api/users/{text}", (string text) => $"{text}");

app.MapGet("/GetData", (IUserRepository userRep) => 
{
    return userRep.GetList();
})
.WithName("GetData");

app.MapGet("/api/users/{userId}/books/{bookId}", (int userId, int bookId) => new
{
    code = 200,
    data = new
    {
        user = userId,
        book = bookId
    },
    message = ""
});

app.MapGet("/api/weatherforecast", () =>
{
    var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast
    (
        DateTime.Now.AddDays(index),
        Random.Shared.Next(-20, 55),
        summaries[Random.Shared.Next(summaries.Length)]
    )).ToArray();
    return forecast;
})
.WithName("GetWeatherForecast");

app.UseHttpsRedirection();

app.UseIdentityServer();
app.UseRouting();

app.UseCors(AllowSpecificOrigins);
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

app.Run();

internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

2、StringPlus.cs

using System.Text;

namespace AuthService.CoreLibrary
{
    public class StringPlus
    {
        public static string[] StringToStrArray(string str)
        {
            string[] strArray = null;
            if (!string.IsNullOrEmpty(str))
            {
                strArray = str.Split(',');
            }
            return strArray;
        }

        public static string[] GetCors(string[] address, string[] port)
        {
            string[] array = null;
            if (address != null && port != null)
            {
                StringBuilder cors = new StringBuilder();
                for (int i = 0; i <= address.Length - 1; i++)
                {
                    for (int j = 0; j <= port.Length - 1; j++)
                        cors.Append($"{address[i]}:{port[j]},");
                }
                string url = cors.ToString();
                if (!string.IsNullOrEmpty(url))
                    array = StringToStrArray(url.Substring(0, url.LastIndexOf(",")));
            }
            return array;
        }
    }
}

3、RedisOptions.cs

public class RedisOptions
{
    public string Host { get; set; }
    public string Port { get; set; }
}

*
*
*

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/905380.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号