首页 > 其他分享 >OpenIddict应用权限

OpenIddict应用权限

时间:2023-06-12 18:12:24浏览次数:42  
标签:权限 OpenIddictConstants manager 应用 OpenIddict Endpoints options Permissions

@@openiddict Implicit

 

OpenIddict 包括一个代号为“应用程序权限”的内置功能, 允许控制和限制每个注册的客户端应用程序能够使用的 OAuth 2.0/OpenID Connect 功能。

目前支持 4 类权限:

  • 端点权限。
  • 授予类型权限。
  • 范围权限。
  • 响应类型权限(在 OpenIddict 3.0 中引入)。

端点权限

定义

端点权限限制客户端应用程序可以使用的端点。

支持的权限

端点持续的
授权 OpenIddictConstants.Permissions.Endpoints.Authorization
内省 OpenIddictConstants.Permissions.Endpoints.Introspection
注销/结束会话 OpenIddictConstants.Permissions.Endpoints.Logout
撤销 OpenIddictConstants.Permissions.Endpoints.Revocation
代币 OpenIddictConstants.Permissions.Endpoints.Token

例子

在以下示例中,mvc允许应用程序使用授权、注销和令牌端点,但在尝试发送内省或撤销请求时会出错:

if (await manager.FindByClientIdAsync("mvc") is null)
{
    await manager.CreateAsync(new OpenIddictApplicationDescriptor
    {
        ClientId = "mvc",
        ClientSecret = "901564A5-E7FE-42CB-B10D-61EF6A8F3654",
        DisplayName = "MVC client application",
        PostLogoutRedirectUris = { new Uri("http://localhost:53507/signout-callback-oidc") },
        RedirectUris = { new Uri("http://localhost:53507/signin-oidc") },
        Permissions =
        {
            OpenIddictConstants.Permissions.Endpoints.Authorization,
            OpenIddictConstants.Permissions.Endpoints.Logout,
            OpenIddictConstants.Permissions.Endpoints.Token
        }
    });
}

禁用端点权限

如果您不想使用端点权限,请调用options.IgnoreEndpointPermissions()以忽略它们:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.IgnoreEndpointPermissions();
    });

授予类型权限

定义

授予类型权限限制允许客户端应用程序使用的授予类型。

支持的权限

资助类型持续的
授权码 OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode
客户端凭据 OpenIddictConstants.Permissions.GrantTypes.ClientCredentials
隐含的 OpenIddictConstants.Permissions.GrantTypes.Implicit
密码 OpenIddictConstants.Permissions.GrantTypes.Password
刷新令牌 OpenIddictConstants.Permissions.GrantTypes.RefreshToken

要添加自定义授予类型权限,您可以使用以下模式:

OpenIddictConstants.Permissions.Prefixes.GrantType   "custom_flow_name"

例子

在下面的示例中,postman应用程序只能使用授权码 grant 而被console限制为passwordrefresh_tokengrants:

if (await manager.FindByClientIdAsync("postman") is null)
{
    await manager.CreateAsync(new OpenIddictApplicationDescriptor
    {
        ClientId = "postman",
        DisplayName = "Postman",
        RedirectUris = { new Uri("https://www.getpostman.com/oauth2/callback") },
        Permissions =
        {
            OpenIddictConstants.Permissions.Endpoints.Authorization,
            OpenIddictConstants.Permissions.Endpoints.Token,

            OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode
        }
    });
}

if (await manager.FindByClientIdAsync("console") is null)
{
    await manager.CreateAsync(new OpenIddictApplicationDescriptor
    {
        ClientId = "console",
        DisplayName = "Console",
        Permissions =
        {
            OpenIddictConstants.Permissions.Endpoints.Token,

            OpenIddictConstants.Permissions.GrantTypes.Password,
            OpenIddictConstants.Permissions.GrantTypes.RefreshToken
        }
    });
}

禁用授予类型权限

如果您不想使用授予类型的权限,请调用options.IgnoreGrantTypePermissions()以忽略它们:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.IgnoreGrantTypePermissions();
    });

范围权限

定义

范围权限限制允许客户端应用程序使用的范围(标准或自定义)。

笔记

和范围是 OpenIddict 的特殊情况openidoffline_access不需要明确的权限。

支持的权限

范围持续的
地址 OpenIddictConstants.Permissions.Scopes.Address
电子邮件 OpenIddictConstants.Permissions.Scopes.Email
电话 OpenIddictConstants.Permissions.Scopes.Phone
轮廓 OpenIddictConstants.Permissions.Scopes.Profile
角色 OpenIddictConstants.Permissions.Scopes.Roles

要添加自定义范围权限,您可以使用以下模式:

OpenIddictConstants.Permissions.Prefixes.Scope   "custom_scope_name"

例子

在以下示例中,angular允许客户端请求addressprofilemarketing_api范围:任何其他范围都将导致返回错误。

if (await manager.FindByClientIdAsync("angular") is null)
{
    await manager.CreateAsync(new OpenIddictApplicationDescriptor
    {
        ClientId = "angular",
        DisplayName = "Angular",
        RedirectUris = { new Uri("https://localhost:34422/callback") },
        Permissions =
        {
            OpenIddictConstants.Permissions.Endpoints.Authorization,
            OpenIddictConstants.Permissions.GrantTypes.Implicit,

            OpenIddictConstants.Permissions.Scopes.Address,
            OpenIddictConstants.Permissions.Scopes.Profile,
            OpenIddictConstants.Permissions.Prefixes.Scope   "marketing_api"
        }
    });
}

禁用范围权限

如果您不想使用范围权限,请调用options.IgnoreScopePermissions()以忽略它们:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.IgnoreScopePermissions();
    });

响应类型权限

笔记

OpenIddict 3.0 中引入了响应类型权限。

定义

响应类型权限限制客户端应用程序在实现交互式流(如代码、隐式或混合)时允许使用的响应类型。

支持的权限

响应类型持续的
代码 OpenIddictConstants.Permissions.ResponseTypes.Code
代码 id_token OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken
代码 id_token 令牌 OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken
代号 OpenIddictConstants.Permissions.ResponseTypes.CodeToken
id_token OpenIddictConstants.Permissions.ResponseTypes.IdToken
id_token 令牌 OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken
没有任何 OpenIddictConstants.Permissions.ResponseTypes.None
令牌 OpenIddictConstants.Permissions.ResponseTypes.Token

例子

在以下示例中,postman应用程序只能使用code id_token响应类型:

if (await manager.FindByClientIdAsync("postman") is null)
{
    await manager.CreateAsync(new OpenIddictApplicationDescriptor
    {
        ClientId = "postman",
        DisplayName = "Postman",
        RedirectUris = { new Uri("https://www.getpostman.com/oauth2/callback") },
        Permissions =
        {
            OpenIddictConstants.Permissions.Endpoints.Authorization,
            OpenIddictConstants.Permissions.Endpoints.Token,

            OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode,

            OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken
        }
    });
}

禁用响应类型权限

如果您不想使用响应类型权限,请调用options.IgnoreResponseTypePermissions()以忽略它们:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.IgnoreResponseTypePermissions();
    });
特别声明   转 OpenIddict应用权限-目之瞬间 (aimzhi.cn)

标签:权限,OpenIddictConstants,manager,应用,OpenIddict,Endpoints,options,Permissions
From: https://www.cnblogs.com/wl-blog/p/17475758.html

相关文章

  • 如何避免安装APP应用时弹窗 “未知风险”?
    许多人都有过这样的经历,下载一个APP应用时,却有弹窗提醒该APP应用来源于未知开发者,或提醒有未知风险,此时我们必须注意其是否来源于可信企业,是否具有安全隐患,因为有大量不法软件隐藏在我们的生活中,一旦下载个人的隐私信息就会面临被窃取、泄露的风险。未知来源的APP应用不应下载......
  • kanzi的android程序修改包名和应用程序名字
    1、修改进程名: 2、修改应用程序名字: 3、修改系统调度ID 通知权限 ......
  • 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理
    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view,只能看到自己项目的jenkinsjob.但是,jenkins默认的权限管理体系不支持用户组或角色的配置,这里利用Role-basedAuthorizationStrategy实现上述目的权限角色配置直接跳过......
  • Android中实现双缓冲(画板应用)和XML文件定义菜单
    1.什么是双缓冲技术?双缓冲技术就是当用户操作界面完成后,会有一个缓冲区保存用户操作的结果。为什么要使用双缓冲技术?拿Android游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容。如何实现双缓冲?使用一个Bitmap对象保留之前的画......
  • 行业报告 | 企业AIGC商业落地应用研究报告
    原创|文BFT机器人01AIGC(生成式人工智能)定义02洞观:AIGC市场全貌与供应商的摩拳擦掌生成式人工智能技术的落地已经远远超出了商业化的进程在企业现有数字化作业体系中切入,成为AIGC率先落地的存量场景和SaaS同根的生成式AI技术与应用,终将在企业级应用场景中共生云与大模型深度绑定,......
  • gtest框架的介绍与应用
    【摘要】在本文中,作者根据之前使用gtest框架进行测试的经验,总结了一些使用方式和案例。在这些案例中,我们可以了解到gtest框架的基本使用方法以及在我们日常测试中的应用,同时也能促进我们对于百度的btest的了解。在我们之后的测试工作中,可以根据各个项目的特点以及gtest、btest等......
  • v6.5版本副单位应用一:录入浮动单位数量,固定一个换算率,根据公式算出销售数量(采购数量等
    v6.5版本副单位应用一:录入浮动单位数量,固定一个换算率,根据公式算出销售数量(采购数量等)1、商品档案自定义--启用一个数字自定义,比如名称叫:副单位换算率2、商品添加一个浮动单位,比如叫:副单位,换算率任意填写一个非0的值;自定义属性里面填写这个副单位对应的换算率3、单据上设置......
  • 实验6 turtle绘图与python库应用编程体验
    实验任务1fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n边形'''foriinrange(n):fd(siz......
  • FaaS应用实战
    宋文龙,花名闻可,阿里云全球技术服务部高级交付专家,有多年云原生应用开发架构经验以及多年高性能服务器研发经验。目前专注于运用阿里云中间件技术、结合阿里巴巴中台架构经验为客户构建符合行业需要的业务中台解决方案并完成交付。一、什么是无服务计算无服务器计算(ServerlessCompu......
  • vector的应用
    向量(vector)1.什么是vectorvector,即向量,是STL中比较常见的数据类型之一。它比数组运用更加灵活,且支持各种类型,同时也是部分STL容器的基类。2.用法(1)声明:#include<vector>//头文件vector<数据类型>向量名;//声明一维vectorvector<vector<数据类型>>向量......