2

ID 서버를 사용하여 인증 된 ASP.net MVC5 클라이언트 (WEBAPP)가 있습니다. 그리고 아래 코드를 사용하여 웹 API에 액세스합니다. 신원 서버ASP.net에서 리소스 권한 부여 Identity Server를 사용하는 WEP API

private async Task<TokenResponse> GetTokenAsync() 
    { 
     var client = new TokenClient(
      "https://localhost:44301/identity/connect/token", 
      "mvc_service", 
      "secret"); 

     return await client.RequestClientCredentialsAsync("sampleApi"); 
    } 

그리고 액세스 토큰을 사용

하지 1.Get 액세스 토큰, 나는 웹 API를 제공 정체성 서버 및 자원 Authotization에 의해 보호됩니다 WEBAPI

  var client = new HttpClient();     
      client.SetBearerToken(token); 
      var gg = this.HttpContext; 
      var json = await client.GetStringAsync("http://localhost:50990/jarvis"); 
      var jsonStr = JArray.Parse(json).ToString(); 
      var model = JsonConvert.DeserializeObject<List<User>>(jsonStr); 

전화 해요 IdentityServer에 의해 (Thinktecture.IdentityModel.Owin.ResourceAuthorization.WebApi)

APIController는 다음과 같습니다.

[Authorize] 
public class AuthorizationController : ApiController 
{ 
    [ResourceAuthorize(AuthorizationResources.AdminActions.Create, AuthorizationResources.Admin)] 
    public async Task<IHttpActionResult> Get() 
    { 
     var user = User as ClaimsPrincipal; 

     List<User> usersList = await GetUsers(); 
     return Json(usersList); 
    } 
} 

그리고 내 ResourceAuthorize 내 질문

  1. 어떻게 내가 그래서 난에 체크를 할 수있는 WEBAPI의 주장을 통과 할 수 있습니다

    public class APIAuthorization: ResourceAuthorizationManager 
    { 
        public override Task<bool> CheckAccessAsync(ResourceAuthorizationContext context) 
        { 
         var resource = context.Resource.First().Value; 
    
         if (resource == AuthorizationResources.Admin) 
         { 
          return CheckAdminAccessAsync(context); 
         } 
    
         if (resource == AuthorizationResources.Editor) 
         { 
          return CheckEditorAccessAsync(context); 
         } 
    
         if (resource == AuthorizationResources.Reader) 
         { 
          return CheckReaderAccessAsync(context); 
         } 
    
         return Nok(); 
        } 
    
        private Task<bool> CheckReaderAccessAsync(ResourceAuthorizationContext context) 
        { 
         return Eval(context.Principal.IsInRole("Admin")); 
        } 
    
        private Task<bool> CheckEditorAccessAsync(ResourceAuthorizationContext context) 
        { 
         return Eval(context.Principal.IsInRole("Admin")); 
        } 
    
        private Task<bool> CheckAdminAccessAsync(ResourceAuthorizationContext context) 
        { 
         return Eval(context.Principal.IsInRole("Admin")); 
        } 
    } 
    

    다음과 같이 ResourceAuthorize

    입니다 APIAuthorization : 평가 (context.Principal.IsInRole ("Admin"))

  2. 이것이 리소스 인증을 수행하는 올바른 방법입니까?

+0

는 기본적으로 나는 데스크탑 개발자입니다. 나는 웹 앱이 처음이다. –

답변

0
 app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions 
     { 
      Authority = "https://localhost:44333/core", 
      RequiredScopes = new[] { "profile", "openid" }, 
     });**This is what i was looking for , This solved my problem** 
관련 문제