2017-08-25 14 views
5

私は、Azure AD B2Cに接続されたAsp.NET MVCアプリケーションを持っています。私は管理者グループに作成した管理者の設定でAzure AD B2C - 役割管理

:私はそれを追加するのは簡単だった、正規のAzure Active Directoryと[Authorize(Roles = "Administrator")]

を使用したい私のコードで

enter image description here

を(ちょうど3行のコード)。しかし、AzureのB2Cのために私は働いているWeb上でチュートリアルや例を見つけることができません。たぶんあなたは私が修正する必要があるものを教えてくれるでしょう。ここで

は私Startup.Auth.csのConfigureAuth方法である

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}" 
     } 
    ); 
} 

答えて

5

まだそれはこのようにあなたが同じに従うことができないアプリケーションに送信するトークンのグループ主張が含まれていないのAzure ADのB2C Azure AD(トークンのグループクレームを含む)で概説したように、

あなたがこの機能をサポートすることができAzureのADのB2Cフィードバックフォーラムでそれを投票でお願い:Get user membership groups in the claims with Azure AD B2C

言われていること、あなたはそれが手動でこれらの請求にグループを取得するには、このアプリケーションでは、いくつかの余分な作業を行うことができますトークンに挿入する

まず、は、Microsoft Graphを呼び出してグループクレームを取得する別のアプリケーションを登録します。 Directory.Read.Allhttps://apps.dev.microsoft.com

    1. Goがアプリケーション権限でアプリを作成します。
    2. はに移動して
    3. (例えばhttps://yourtenant.onmicrosoft.com/groups)、URIをリダイレクトし、このアプリケーションへの同意をプラットフォームと選択し、Webを追加し、いずれかを与える新しいパスワードを生成をクリックすることで、アプリケーションの秘密を追加します。https://login.microsoftonline.com/YOUR_TENANT.onmicrosoft.com/adminconsent?client_id=YOUR_CLIENT_ID&state=12345&redirect_uri=YOUR_REDIRECT_URI

    その後、あなたはOnAuthorizationCodeReceivedハンドラ、right after redeeming the codeの内のコードに次のコードを追加する必要があります

    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; 
    } 
    
  • +0

    最初の大きなお返事ありがとうございます! 私はそれについて2つの質問が残っています。 どこにURLを追加する必要がありますか(ステップ4)、リダイレクトURI(b2cの返信URIですか)とは何ですか? コードに別の質問: 私は変数を埋める何sould: - GraphClientId - GraphRedirectUri - GraphClientSecret - userTokenCache そして、VisualStudioをはでエラーメッセージを呼び出している:新しいC。申し立て ご協力いただきありがとうございます:-) – DarkWing89

    +0

    アプリの登録手順をさらに明確にし、c.Claimの問題に対処するためのアップデートを行いました。 – Saca

    +0

    GraphClientID =登録したアプリケーションのアプリケーションID GraphSecret =アプリケーションの秘密 GraphRedirectUri =指定したリダイレクトURI userTokenCacheは、すでにサンプルのOnAuthorizationCodeReceivedにあるコードから既に定義されているはずです。 – Saca

    関連する問題