c# 동적 컨트롤 - 베어러 인증에 추가 로직 추가




1 Answers

참고로 맞춤 오류 메시지를 설정하려면 context.Rejectedcontext.SetError 의 순서를 바꿔야합니다.

    // Summary:
    //     Marks this context as not validated by the application. IsValidated and HasError
    //     become false as a result of calling.
    public virtual void Rejected();

context.Rejected 를 배치하는 경우. context.SetError 다음에 속성 context.HasErrorcontext.HasError 됩니다 context.HasErrorfalse 로 재설정되므로 올바른 사용 방법은 다음과 같습니다.

    // Client could not be validated.
    context.Rejected();
    context.SetError("invalid_client", "Client credentials are invalid.");
제어 배열 종류

OWIN 무기 토큰 인증을 구현하려고하는데이 기사를 기반으로 합니다 . 그러나 구현 방법을 모르는 무기명 토큰에 필요한 추가 정보가 하나 있습니다.

내 응용 프로그램에서는 무기명 토큰 사용자 정보 (예 : userid)에서 추론해야합니다. 권한이 부여 된 사용자가 다른 사용자로 행동하는 것을 원하지 않기 때문에 이는 중요합니다. 이게 가능합니까? 올바른 방법일까요? 만약 userid가 guid라면 이것은 간단 할 것이다. 이 경우 정수입니다. 권한이 부여 된 사용자는 추측 할 수있는 / 무차별 적으로 다른 사람을 가장 할 수 있습니다. 이는 용인 할 수 없습니다.

이 코드를 보면 :

public void ConfigureOAuth(IAppBuilder app)
{
    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
        Provider = new SimpleAuthorizationServerProvider()
    };

    // Token Generation
    app.UseOAuthAuthorizationServer(OAuthServerOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.Validated();
    }

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        using (AuthRepository _repo = new AuthRepository())
        {
            IdentityUser user = await _repo.FindUser(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim("sub", context.UserName));
        identity.AddClaim(new Claim("role", "user"));

        context.Validated(identity);
    }
}

나는 내가 필요로하는 것을 수용하기 위해 권한 부여 / 인증을 무시하는 것이 가능하다고 생각할 것입니다.




Related