Azure B2C Claims Based Authentication and Custom Claims - azure-active-directory

How does one implement user groups to protect the APIs using .net core 2.0 and Azure AD B2C?
Most of my functions are available for anyone to use, but there are a handful that are for administrators only (e.g. delete account, list all users, etc.).
In Azure one can set up a bunch of custom claims, but the user seems to have permission to edit these claims.
So, for example, I could set up an attribute which is 'Group' and set the value to 'User' or 'Administrator', but it appears to me the user could edit this attribute, thus making the whole scheme worthless.
How?

Custom attributes are not editable by the user unless they are exposed in a B2C policy (like a sign-up or edit policy)
You can set custom attributes through the Azure AD Graph API.
or
You can set custom attributes by sending a JWT to B2C with Custom Policies. One example is here.

Related

Manage custom attributes for user and group in Azure AD

I have an app that is implementing SCIM 2.0.
I have connected this app to my Azure AD and I am succeeding to provision users and groups to my app from from Azure AD.
I want to add a custom attribute and manage the value of that attribute in Azure AD for every user or a group and add that data to my provisioning mapping - to send it to my app as part of the provisioning process.
I can't find where in Azure AD I can do that.
I have tried to add a custom security attributes, I have assigned it to my app. But when I go to the provisioning mapping - the attribute is not in the list of source attributes that I can choose from.
I have also tried to add a custom attribute (which I was able to choose in the provisioning mapping), but I did not find where I can manage the value of this attribute to a user in the Azure AD .It looks like it can only be filled in a user flow (login with SSO) - which is not my case.
I did not find a way to create a custom attribute for a group and manage its values in the Azure AD and then add to provisioning group mapping.
I saw that there are extension attributes, but where in Azure AD I can enter data to these attributes for a specific users or groups?
Can anyone help?
Is there a completely different way to add extra information to user / group and send it from Azure AD to my app using SCIM?
• When you provision an application in Azure AD through SCIM (System for Cross-Domain Identity Management) for the purpose of provisioning the Azure AD users to the ‘Enterprise application’ created in Azure AD tenant, you enter the URL of the application’s SCIM endpoint as ‘https://api.contoso.com/scim/’ and since it requires an OAuth bearer token from an issuer other than Azure AD as it can validate this token issued by the Azure AD itself. Therefore, in the ‘Mappings’ section of the ‘Provisioning’ section for the Azure AD enterprise application, you have the option for reviewing the attributes that are synchronized from Azure AD to the SCIM provisioned app. These attributes are selected as ‘Matching’ properties and are used to match the users and groups in your app for update operations.
Also, to add the extension attributes to the user in Azure AD for them to be exported to the SCIM provisioned application, you will need to create a dynamic group with members added to them via a dynamic query as shown below. Before that, you will have to synchronize the extension attributes through Azure AD connect utility from the on-premises AD that were created there already. Then, these already created extension attributes can be selected to be mapped with the SCIM provisioned app as below: -
Complete the expression to suit your requirements. As above, the rule is set to ‘(user.extension_9d98ed114c4840d298fad781915f27e4_division -eq "Sales and marketing")’.
• Secondly, you can also create extension attributes for users that are to be synchronized from Azure AD to the SCIM provisioned application through Microsoft Graph API as shown below: -
First, create a ‘GET’ request to the object ID of the SCIM provisioned application to check the request sent status success. Then, send a ‘POST’ request to the object ID of the SCIM provisioned application as shown below with the custom extension attribute in the body of the request: -
Now, since this custom extension attribute is created without any value, you will have to update this attribute with a value so that this attribute is synchronized to the SCIM provisioned application accordingly as shown below: -
Thus, as shown above, you can add custom extension attributes to any Azure AD user and synchronize these attribute values to the SCIM provisioned app.
For more detailed information on the above, please refer to the below links: -
https://learningbydoing.cloud/blog/getting-started-with-azuread-extension-attributes/#:~:text=Go%20to%20the%20Azure%20AD,settings%20default%20and%20click%20Register.
https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sync-feature-directory-extensions

Single Signin With AAD and B2C

We're trying to implement a single sign in using both AAD and B2C. The web app needs to allow internal and external people to login in. I'm able to implement each method individually, but is it possible to determine the login method based upon email addr. If they're an external person, I would authenticate with B2C. If internal, AAD.
Any suggestions or is this even possible,
For OIDC, "domain_hint" would work.
"The domain hint can be used to skip directly to the sign-in page of the specified identity provider, instead of having the user make a selection among the list of available identity providers".
Update
The usual way to do this would be to authenticate with B2C and then add a login button to AAD i.e. federation.

Editing the value of a custom attribute via Azure blades or programmatically in Azure AD B2C

Security Groups (Application Roles) are not currently supported in Azure AD B2C and it is the highest requested feature on the Azure AD B2C Feedback:
https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/10123836-get-user-membership-groups-in-the-claims-with-ad-b
Other threads are recommending Custom Attributes to simulate this:
https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/31997947-support-application-specific-roles-in-b2c
I added, via Azure blades UI, a Custom Attribute of type String and named it RoleAttr and assigned it against the B2C_1_SignUpSignIn User Flow (Policies) and added it to the Application claims.
For testing purposes, all done via UI, if I add this attribute to User attributes, when a user is signing up, he/she is getting a new field called RoleAttr, which means it is working (I guess?!). But this is not my intention as this value should be assigned by an admin and not by the user, my intention is to get it as part of the claims.
1 - How can I edit this value from Azure blades UI (I can only see the Built-In attributes, not the custom ones)?
2- Can I do this programmatically (PowerShell, C#, GraphAPI, etc...)? Say by creating a tool that will act on behalf of an admin and manipulate a user object using his/her Object Id?
1) Currently, you can't edit the custom attributes (a.k.a. the extension properties) for a user object via the Azure portal.
2) You can manage the extension properties for a user object using the Azure AD Graph API with the Azure AD B2C tenant.

Custom attributes not shown in user profile in Azure AD B2C

I have added custom attributes during Sign-up and added the same in the application claim in Azure AD B2C management portal.
I was expecting these custom attributes to be added as part of the user profile who signed-up using their social identity provider.
Could someone help me on getting these custom attributes in the user profile screen of Azure AD B2C?
Besides creating the custom attribute, you need to add it to your policy's Attributes. Optionally you can also configure the attribute as an application claim.
You do this in the "Sign-up attributes" or "Edit profile attributes" section while editing you policy.
Keep in mind this is different from adding the attribute to your application claims.
While the former shows it in the UI allowing the user to edit the attribute, the latter sends the value of that attribute to the application in the id_token.
See the use a custom attribute in your policy documentation for more info.
It is also worth noting that at this time, custom attributes do not show up in the Azure portal's Users & Groups blade. As an admin, you can only view and update those using the Graph. You can request this as a feature in the Azure AD B2C feedback forum

Querying a tenants Azure AD from a multi-tenant Application

We have a multi-tenant Saas application providing sign in using our username/pwd authentication system and using Azure AD (OAuth 2.0 flows). When a user signs in using Azure AD, we can get the user's profile using https://graph.windows.net/{tenantid}/me. We want however to get more information using the memberOf or getMemberGroups operations to retrieve the user's groups in the tenants directory, to map specific groups from the tenant to an organizational structure in our application. However these operations always fail with a Forbidden statuscode. Are we missing required permissions or is it just not possible to query for the groups and roles of another tenant.
Thanks in advance
This is totally possible, but today requires that you request the "Read Directory" permission. This permission does require and admin of the tenant to consent. We are looking at adding some additional fine grained permissions for Graph API that will allow users to consent (to get group membership information).
Another option for you is to configure your application to request group membership claims (which should appear in any user or JWT token). You can do this by going to the azure management portal and getting to your app's config page. From there download the application manifest file and update the groupMembershipClaims property. You can see most of the properties in the application manifest described here: https://msdn.microsoft.com/en-us/library/azure/dn151677.aspx. Once updated, you can upload this app manifest file, and this will configure your application accordingly. Once done, AAD will issue group membership claims in the token. Dushyant has written a nice blog about authorizing access to a web app, using group membership claims or app roles. You can find it via Alex Simons blog post here: http://blogs.technet.com/b/ad/archive/2014/12/18/azure-active-directory-now-with-group-claims-and-application-roles.aspx
HTHs

Resources