gpt4 book ai didi

authentication - 我们可以将身份服务器 4 中的用户限制为特定应用程序吗?

转载 作者:行者123 更新时间:2023-12-04 11:01:35 25 4
gpt4 key购买 nike

我正在尝试为企业场景实现 IdentityServer 4。

我了解用户是在身份服务器上注册的。

我的问题是如何向用户授予针对应用程序的权限,例如用户需要分配给特定应用程序,如果未分配应用程序应该返回未经授权的。

如果用户需要访问多个应用程序,则需要多次分配。

我正在寻找一种方法让身份服务器在用户无法一次性访问应用程序的情况下使提交的 token 无效,即使如果受质疑的 token 是由用户有权访问的其他应用程序提交的,它可能是有效的

最佳答案

Identity Server 绝对处理最基本的授权。它创建在应用程序授权中必不可少的授权代码和 access_tokens。没有它们,您将无法获得授权。因此,其他人声称 Identity Server 不进行授权是完全错误的。

一周前我来到这里,为同样的问题寻找解决方案。如果用户不满足某些参数(在我的例子中是 UserClient 表),我想通过不授予他们访问 token 来限制用户使用特定的应用程序。幸运的是我有一个解决方案。 Identity Server 4 实现了一些在授权或 token 创建时发生的自定义验证器,他们称之为自定义验证器。他们是

   internal class DefaultCustomAuthorizeRequestValidator : ICustomAuthorizeRequestValidator
internal class DefaultCustomTokenRequestValidator : ICustomTokenRequestValidator
public class DefaultCustomTokenValidator : ICustomTokenValidator

当他们被叫到时,名字真的会说出来。每个都包含一个方法
   public Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
{
return Task.CompletedTask;
}

注意到什么了吗?没错!它什么也不做。几乎就好像它们注定要被替换一样。 (这是)。

这是您可以添加自定义逻辑以拒绝请求的区域。 CustomAuthorizeRequestValidationContext 包含 ClientId 和 User 声明信息。它还包含一个名为 IsError 的 bool 值。只需将其设置为 true 和 whamy!拒绝访问。您还可以设置错误消息等。这是一个实现 ICustomAuthorizeRequestValidator 接口(interface)的示例,该接口(interface)将根据用户 ID 限制用户
  public Task ValidateAsync(CustomAuthorizeRequestValidationContext context)
{
var sub = context.Result.ValidatedRequest.Subject.FindFirst("sub");
if (sub != null && sub.Value != "88421113")
{
context.Result.IsError = true;
context.Result.Error = "Unauthorized";
context.Result.ErrorDescription = "You are not authorized for this client";
}

return Task.CompletedTask;
}

随意注入(inject)一两个 dbcontext 来读取您的 userclient 表。我检查 sub 声明是否为空,因为在实际登录发生之前这将被多次命中。

从我注意到的情况来看,这三者在使用方面表现相似,但在结果方面却不同。设置错误 ICustomAuthorizeRequestValidator 将阻止重定向到您的客户端,而是将您定向到 Identity Server 错误屏幕。另外两个将重定向回客户端,通常会抛出一些 HttpResponse 错误。因此替换 ICustomAuthorizeRequestValidator 似乎效果最好。

所以简单地创建了一个实现 ICustomAuthorizeRequestValidator 的类。然后像这样将其添加到您的身份服务中
services.AddIdentityServer().AddCustomAuthorizeRequestValidator<MyCustomValidator>()

你就完成了。

关于authentication - 我们可以将身份服务器 4 中的用户限制为特定应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com