Jwt 토큰 인증을 사용하는 웹 응용 프로그램을 만들려고하는데, 로그온하면 제대로 작동합니다. 이제 누가 어떤 페이지에 액세스 할 수 있는지에 대한 권한을 추가하려고합니다. 내 컨트롤러에서 [Authorize]
. 하지만 로그인 한 상태에서 작업 중 하나로 이동하려고하면 항상 빈 페이지가 표시되고이를 검사 할 때 작업은 항상 401 Unauthorized를 반환합니다. 제안 사항이 있습니까?
Api에 인증 헤더를 보내기위한 내 headerservice :
using System.Collections.Generic;
namespace RelationizeWeb.Facade.Services
{
public class HeaderService : IHeaderService
{
private const string AuthorizationHeaderKey = "Authorization";
private const string BearerHeaderValue = "Bearer";
public Dictionary<string, List<string>> CreateAuthorizationHeader(string token)
{
var dict = new Dictionary<string, List<string>>
{
{ AuthorizationHeaderKey, new List<string>{ $"{BearerHeaderValue} {token}" } }
};
return dict;
}
public Dictionary<string, List<string>> CreateHeader(string key, string value)
{
var dict = new Dictionary<string, List<string>>
{
{ key, new List<string> { value } }
};
return dict;
}
}
}
예를 들어 OpinionMakerService에서 만드는 Api 요청의 예 :
public IEnumerable<OpinionMaker> GetOpinionMakers(JwtTokenResponse jwt)
{
try
{
return (List<OpinionMaker>)_relationizeApiAgent.GetOpinionMakersWithHttpMessages(_headerService.CreateAuthorizationHeader(jwt.AccessToken)).Body;
}
catch(Exception)
{
return null;
}
}
azure를 사용하여 애플리케이션에 대한 JWT를 생성 할 수 있습니다. REST API UseJwtBearerAuthentication
에 대한 StartUp.cs
파일에 이름이 지정된 확장 메소드를 호출 [Authorize]
하고 컨트롤러에 속성을 사용해야 합니다. 이 UseJwtBearerAuthentication
방법은 아래와 같이 작동합니다.
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Authority = <your auth name>,
Audience = <target audience URL>
});
자세한 내용은 아래 링크를 참조하십시오. 1. https://blogs.msdn.microsoft.com/webdev/2017/04/06/jwt-validation-and-authorization-in-asp-net-core/
ADAL.JS와 같은 클라이언트 측 라이브러리를 사용하여 Azure 서비스를 호출하여 JWT 전달자 토큰을 얻은 다음 각 요청의 토큰을 컨트롤러에 보낼 수 있습니다. 각 요청에서 확인됩니다. Azure JWT 인증을 사용하는 Angular2 앱에서이 접근 방식을 따랐습니다.
adal.js 링크 https://github.com/AzureAD/azure-activedirectory-library-for-js
리소스 : https://blogs.msdn.microsoft.com/premier_developer/2017/04/26/using-adal-with-angular2/
편집 : 아래 코드를 사용하여 JWT 토큰에 액세스하고 다른 컨트롤러에서 컨트롤러를 호출하기 전에 Authorization 헤더에 추가 할 수 있습니다.
HttpClient client = new HttpClient();
var token = <add your token here>; // call GetToken() method here and extract access_token from JwtTokenResponse class property.
client.DefaultRequestHeaders.Authorization = new
AuthenticationHeaderValue("Bearer", token.Substring("Bearer ".Length).Trim());
//call the api method using SendAsync() or PostAsyc() etc.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다