首页 > 数据库 >.Net6 + GraphQL + MongoDb 实现GraphQL的认证和授权

.Net6 + GraphQL + MongoDb 实现GraphQL的认证和授权

时间:2023-02-28 20:56:38浏览次数:49  
标签:MongoDb db 认证 public GraphQL Net6 授权 options

介绍

文本说一下认证和授权,因为GraphQL的特殊性他不能直接使用微软提供的授权来做

正文

关于认证我这边没有自己写,我采用了okta提供的第三方认证服务,

builder.Services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = OktaDefaults.ApiAuthenticationScheme;
    options.DefaultChallengeScheme = OktaDefaults.ApiAuthenticationScheme;
    options.DefaultSignInScheme = OktaDefaults.ApiAuthenticationScheme;
}).AddOktaWebApi(new OktaWebApiOptions()
{
    OktaDomain = "https://dev-xxxx.okta.com",
    AuthorizationServerId = "default",
    Audience = "api://default",
});


builder.Services
    .AddGraphQLServer()
    .AddQueryType<PostQuery>()
    .AddMutationType<PostMutation>()
    .AddSubscriptionType<PostSubscription>()
    .AddAuthorization()


app.UseAuthentication();


        [UsePaging]
        [UseOffsetPaging]
        [UseProjection]
        [UseFiltering]
        [UseSorting]
        [Authorize]
        public IExecutable<Post> GetPosts([Service] DbContext db)
        { 
            
            return db.Post.AsExecutable();

        }

我们先不加认证Jwt来调用下接口,可以发现提示没有权限
94

当我我们加上Jwt后
95

接下来我们加上授权看看,我们做一个简单的策略授权。

builder.Services.AddAuthorization(options =>
{

    options.AddPolicy("HasCountry", policy =>
        policy.RequireAssertion(context =>
            context.User.HasClaim(c => c.Type == "http://schemas.microsoft.com/identity/claims/scope")));
});


app.UseAuthorization();


 [Authorize(Policy = "HasCountry")]
    public class PostQuery
    {

        [UsePaging]
        [UseOffsetPaging]
        [UseProjection]
        [UseFiltering]
        [UseSorting]
        [Authorize]
        public IExecutable<Post> GetPosts([Service] DbContext db)
        { 
            
            return db.Post.AsExecutable();

        }
    }

96

认证授权的教程就先到这,这是一个非常简单的例子,GraphQL厉害的是可以对字段进行授权,我们高级篇再说

结语

本系列主要将GraphQL的使用,示例项目不能应用于生产,后续发一些GraphQL库出来讲解生产中的实际应用

联系作者:加群:867095512 @MrChuJiu

标签:MongoDb,db,认证,public,GraphQL,Net6,授权,options
From: https://www.cnblogs.com/MrChuJiu/p/17165929.html

相关文章

  • net6项目遇到的一些问题
    1添加redis时,在控制台程序可以运行,而在webapi无法运行,同样代码在家里电脑可以可能是网络设置的问题2获取appsetting的值2.1 builder.Configuration["Redis:Host"];2.......
  • 如何将 Autofac 整合进 Net6.0 Core MVC 项目中
    一、前言1、前言Asp.NetCoreMvc,我也用了很长一段时间了,它现在的编程模型和方式还是特别棒的,都是组件开发,什么都可以替换,当然了,您别抬杠,有些还是......
  • .NET微服务系统迁移至.NET6.0的故事
    本次迁移涉及的是公司内部一个业务子系统,该系统是一个多样化的应用,支撑着公司的多个业务方向。目前,该系统由40多个基于.NET的微服务应用构成,使用数千个CPU核心和数TB内存,......
  • .Net6 微服务之Ocelot+IdentityServer4入门看这篇就够了
    前言.Net6使用Consul实现服务注册与发现看这篇就够了.Net6使用Ocelot+Consul看这篇就够了.Net6微服务之Polly入门看这篇就够了书接上文,本文将继续建立在.N......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计
    前言前几章教程我们把ToDoList系统的基本框架搭建好了,现在我们需要根据我们的需求把ToDoList系统所需要的系统集合(相当于关系型数据库中的数据库表)。接下来我们先简单......
  • 「文档数据库之争」MongoDB和CouchDB的比较
    MongoDB和CouchDB都是基于文档的NoSQL数据库类型。文档数据库又称mdocumentstore,通常用于存储半结构化数据的文档格式及其详细描述。它允许创建和更新程序,而不需要引用主模......
  • MongoDB在银行海量历史订单交易数据查询中的应用(Spring boot + Bee)
    MongoDB在银行海量历史订单交易数据查询中的应用(Springboot+Bee)近年来,随着各种便捷支付方式的普及,银行账户交易数据呈现爆炸式增长,同时数据模型也在不断变化,传统关......
  • 已解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tosta
     报错问题粉丝群里面的一个小伙伴想安装MongoDB但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug......
  • 2023最新MongoDB规范
    前言MongoDB是非关系型数据库的典型代表,DB-EnginesRanking数据显示,近年来,MongoDB在NoSQL领域一直独占鳌头。MongoDB是为快速开发互联网应用而设计的数据库系统,其数据模......
  • MongoDB
    MongoDBNoSQL(NoSQL=NotOnlySQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运......