Identityserver4 如何使用IdentityServer 4发布长寿命只读令牌

Identityserver4 如何使用IdentityServer 4发布长寿命只读令牌,identityserver4,Identityserver4,我正在考虑如何进行后续工作 允许访问文件的API(存储API) 门户页面(SPA使用隐式授权) 身份服务器 这样,用户就可以通过隐式授权登录门户。根据identity server中的此客户端配置,门户现在有一个短期引用令牌 new Client { ClientId = "Portal", ClientName ="Portal", ClientUri = "https://example.com", AllowAccessTokensViaBrowser =

我正在考虑如何进行后续工作

  • 允许访问文件的API(存储API)
  • 门户页面(SPA使用隐式授权)
  • 身份服务器
  • 这样,用户就可以通过隐式授权登录门户。根据identity server中的此客户端配置,门户现在有一个短期引用令牌

    new Client
    {
        ClientId = "Portal",
        ClientName ="Portal",
        ClientUri = "https://example.com",
        AllowAccessTokensViaBrowser = true,
        RequireClientSecret = false,
        RequireConsent=false,
        AccessTokenType = AccessTokenType.Reference,                 
        AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.Email,
                "api1"
            },
        }
        ...
    
    然后,我希望用户能够获得一个公共访问令牌,他可以将该令牌包含在永久链接中,与朋友共享他的文件,还可以创建新令牌,并根据他的要求再次撤销它们。但是这些标记应该是只读的

    我读了一些关于长寿命参考标记的文章,并得出结论,这就是我所需要的。但是我不想更改上面用于与用户交互流的客户端,因为我希望他们的令牌是短期的

    我该怎么办

  • 我是否创建新的客户端注册
    ClientId=Portal1
    并设置
    AccessTokenLifetime=infinity
  • 还有别的吗
  • 对于只读部分。 现在允许的作用域只有“api”。在这里,我将为不同的访问策略创建多个作用域

  • 我认为这里不合适的一个原因是,在为api设置身份验证时

    services.AddAuthentication().AddIdentityServerAuthentication((options) =>
    {
    
        options.Authority = opidc.Authority; 
        options.RequireHttpsMetadata = true;
    
        options.EnableCaching = false;
        options.TokenRetriever = StorageServiceMiddleware.TokenRetriver;
    
        options.ApiName = "api1";
        options.ApiSecret = "secret";
    });
    
    我得到的印象是ApiName是单数的,并不是真正用来处理多种类型的读写作用域。那个么,如何在aspnet核心中使用授权处理程序配置它呢

    同样,这里的目标是创建一个用户可以创建和撤销令牌的服务,例如第三方服务可以代表用户消耗资源

    更新延期补助金 如果为长寿命引用令牌创建单独的客户端,则可以创建一个端点,该端点使用扩展授权从短命令牌创建长寿命令牌。这有意义吗