반응형
Azure AD B2C - 역할 관리
Azure AD B2C에 연결된 ASP.NET MVC 애플리케이션을 가지고 있습니다.
관리자 설정에서 관리자 그룹을 만들었습니다.
내 코드에서 사용하고 싶습니다.[Authorize(Roles = "Administrator")]
일반적인 Azure Active Directory를 사용하면 쉽게 추가할 수 있습니다(코드 3줄만).그러나 Azure AD B2C의 경우 웹에서 작동하는 튜토리얼이나 예제를 찾을 수 없습니다.제가 무엇을 수정해야 하는지 알려주실 수 있을 것 같습니다.
다음은 구성입니다.내 시작의 인증 방법입니다.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// Generate the metadata address using the tenant and policy information
MetadataAddress = String.Format(AadInstance, Tenant, DefaultPolicy),
// These are standard OpenID Connect parameters, with values pulled from web.config
ClientId = ClientId,
RedirectUri = RedirectUri,
PostLogoutRedirectUri = RedirectUri,
// Specify the callbacks for each type of notifications
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = OnRedirectToIdentityProvider,
AuthorizationCodeReceived = OnAuthorizationCodeReceived,
AuthenticationFailed = OnAuthenticationFailed,
},
// Specify the claims to validate
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name"
},
// Specify the scope by appending all of the scopes requested into one string (separated by a blank space)
Scope = $"openid profile offline_access {ReadTasksScope} {WriteTasksScope}"
}
);
}
Azure AD B2C는 애플리케이션으로 전송되는 토큰에 그룹 클레임을 아직 포함하지 않으므로 Azure AD에서 개요를 설명한 것과 동일한 접근 방식을 따를 수 없습니다(토큰에 그룹 클레임 포함).
Azure AD B2C 피드백 포럼에서 투표를 통해 이 기능 질문을 지원할 수 있습니다.Azure AD B2C를 사용하여 클레임의 사용자 멤버십 그룹 가져오기
즉, 이 애플리케이션에서 추가 작업을 수행하여 그룹이 주장하는 이러한 클레임을 수동으로 검색하여 토큰에 주입할 수 있습니다.
먼저 Microsoft Graph를 호출하여 그룹 클레임을 검색하는 별도의 응용 프로그램을 등록합니다.
- https://apps.dev.microsoft.com 으로 이동합니다.
- 응용 프로그램 권한: 디렉터리를 사용하여 앱을 만듭니다.다 읽으세요.
- 새 암호 생성을 클릭하여 응용 프로그램 암호 추가
- 플랫폼을 추가하고 웹을 선택한 후 리디렉션 URI(예:
https://yourtenant.onmicrosoft.com/groups
) - 다음 위치로 이동하여 이 응용 프로그램에 대한 동의:
https://login.microsoftonline.com/YOUR_TENANT.onmicrosoft.com/adminconsent?client_id=YOUR_CLIENT_ID&state=12345&redirect_uri=YOUR_REDIRECT_URI
그런 다음 코드를 사용한 후 바로 핸들러 내부에 다음 코드를 추가해야 합니다.
var authority = $"https://login.microsoftonline.com/{Tenant}";
var graphCca = new ConfidentialClientApplication(GraphClientId, authority, GraphRedirectUri, new ClientCredential(GraphClientSecret), userTokenCache, null);
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
try
{
AuthenticationResult authenticationResult = await graphCca.AcquireTokenForClientAsync(scopes);
string token = authenticationResult.AccessToken;
using (var client = new HttpClient())
{
string requestUrl = $"https://graph.microsoft.com/v1.0/users/{signedInUserID}/memberOf?$select=displayName";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = await client.SendAsync(request);
var responseString = await response.Content.ReadAsStringAsync();
var json = JObject.Parse(responseString);
foreach (var group in json["value"])
notification.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Role, group["displayName"].ToString(), System.Security.Claims.ClaimValueTypes.String, "Graph"));
//TODO: Handle paging.
// https://developer.microsoft.com/en-us/graph/docs/concepts/paging
// If the user is a member of more than 100 groups,
// you'll need to retrieve the next page of results.
}
} catch (Exception ex)
{
//TODO: Handle
throw;
}
언급URL : https://stackoverflow.com/questions/45885795/azure-ad-b2c-role-management
반응형
'programing' 카테고리의 다른 글
EC2: sudo 노드 명령을 찾을 수 없지만 sudo가 없는 노드는 정상입니다. (0) | 2023.05.25 |
---|---|
인코딩이 없는 ASP.NET MVC 레이저 렌더 (0) | 2023.05.25 |
MongoDBC# 드라이버 2.0 - 문서 업데이트 (0) | 2023.05.25 |
gitbash로 폴더를 변경하는 방법은 무엇입니까? (0) | 2023.05.25 |
virtualenwrapper 및 Python 3 (0) | 2023.05.25 |