代码改变世界

asp.netcore Authentication, schema

2022-12-28 14:29  qgbo  阅读(407)  评论(0)    收藏  举报

1.  code  like this will report error:  

builder.Services.AddAuthentication("dd").AddCookie("ddd");
builder.Services.AddAuthorization();

InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions)

the source code is  AuthenticationService

the exception happen, because the parameter scheme is empty

AuthenticationMiddleware use AuthenticationService

2. the middleware will execute the sentence, which will finally trigger the precede errorcontext.AuthenticateAsync(defaultAuthenticate.Name);

3. Schemes.GetDefaultAuthenticateSchemeAsync(); will return the scheme, so the call is critical

4. if the default scheme is null the method will return null; otherwise, the result will come from a IDictionary<string, AuthenticationScheme>,

the key is authenticationScheme, which come from AuthenticationOptions.schemes;

5.addcookie(schemeName) will call addscheme() which add a schemeName to AuthenticationOptions.schemes. and will add the CookieAuthenticationHandler

6. For each scheme, the important thing is the scheme name and the handler type.