我需要为同事创建一个框架,允许多种身份验证方案和关联授权策略(因为我们的 IDP 有多种允许的方法),但这些方案需要依赖项注入,因为 IDP 信息是从基于云的配置源提供的。在我到目前为止所处理的情况下,身份验证是使用 JWT Bearer 令牌完成的。
我想坚持最新的做法,尽可能与时俱进。所以看来我应该在我AddAuthentication的.AddJwtBearerAddAuthorizationIServiceCollection
我期望控制器或端点可以用 来装饰,AuthorizeAttribute并且它将采用指定的默认策略,该策略将使用指定的默认 authN 方案。如果该属性被赋予构造函数参数Policy = <Some Non Default Policy>或AuthenticationSchemes = <Some other scheme>,它将切换到这些参数。
首先,我确定我需要使用依赖注入,所以我使用IConfigureNamedOptions<JwtBearerOptions>.
所以我为授权代码创建了这样的选项类
public class AuthCodeJwtBearerOptions : IConfigureNamedOptions<JwtBearerOptions>
{
private readonly IClaimsTransformation _claimsTransformation;
private readonly ConfigurationManager<OpenIdConnectConfiguration> _configurationManager;
public AuthCodeJwtBearerOptions(IOptions<TidV4OAuthSettings> tidV4OAuthOptions,
IClaimsTransformation claimsTransformation)
{
_claimsTransformation = claimsTransformation;
_configurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>(tidV4OAuthOptions.Value.WellknownUrl,
new OpenIdConnectConfigurationRetriever());
}
public void Configure(JwtBearerOptions options) => Configure("AuthCode", options);
public void Configure(string name, JwtBearerOptions options) …Run Code Online (Sandbox Code Playgroud)