This article shows how Identity can be extended and used together with Identity Server4 to implement application specific requirements. Mvc; using Resource With Identity Server With Client.The application allows users to register and can access the application for 7 days. Any admin can activate or deactivate a user using a custom user management API. Model; namespace Resource With Identity Server With Client.Extra properties are added to the Identity user model to support this. The SPA application is implemented using Angular, Webpack 4 and Typescript 2. Controllers Angular User Management Component The Angular SPA is built using Webpack 4 with typescript.Code: https://github.com/damienbod/Asp Net5Identity Server Angular Implicit Flow History: 2018-06-22: Updated ASP. NET Core Identity 2.1 Full history: https://github.com/damienbod/Asp Net5Identity Server Angular Implicit Flow#history Other posts in this series: Updating Identity Updating Identity is pretty easy. Entity Framework Core package which is included in the project as a Nu Get package. This is done in the startup class in the Configure Services method using the Add Identity extension. The Application Db Context which uses SQLite is then used as the store for Identity. Identity; namespace Identity Server With Asp Net Identity Sqlite Using the Identity properties validating a token The Is Admin property is used to define whether a logged on user has the admin role. See https://github.com/damienbod/Angular2Webpack Visual Studio on how to setup a Angular, Webpack 4 app with ASP. The Angular app requires a service to access the ASP. This is implemented in the User Management Service which needs to be added to the app.module then.To do so we need to add a service which is responsible to send emails to users, in my case I’ll use Send Grid which is service provider for sending emails, but you can use any other service provider or your exchange change server to do this.If you want to follow along with this tutorial you can create a free account with Send Grid which provides you with 400 email per day, pretty good!This is easy to implement, all you need to do is to open controller “Accounts Controller” and paste the code below: Notice how we are calling the method “Change Password Async” and passing the authenticated User Id, old password and new password.If you tried to call this endpoint, the extension method “Get User Id” will not work because you are calling it as anonymous user and the system doesn’t know your identity, so hold on the testing until we implement authentication part.
After we configured the “Email Service”, we need to hock it with our Identity system, and this is very simple step, open file “Application User Manager” and inside method “Create” paste the code below: As you see from the code above, the “app User Manager” instance contains property named “Email Service” which you set it the class we’ve just created “Email Service”. Create(user)); The implementation is straight forward, what we’ve done here is creating a unique code (token) which is valid for the next 6 hours and tied to this user Id only this happen when calling “Generate Email Confirmation Token Async” method, then we want to build an activation link to send it in the email body, this link will contain the user Id and the code created.
The method “Change Password Async” will take care of validating your current password, as well validating your new password policy, and then updating your old password with new one.
Do not forget to add the “Change Password Binding Model” to the class “Account Binding Models” as the code below: We want to add the feature which allows a user in “Admin” role to delete user account, until now we didn’t introduce Roles management or authorization, so we’ll add this end point now and later we’ll do slight modification on it, for now any anonymous user can invoke it and delete any user by passing the user Id.
If the user can set custom properties, the Register View Model model needs to be extended and the corresponding view. The Identity EFCore Application Db Context context is used directly in the controller to simplify things, but usually this would be separated from the Controller, or if you have a lot of users, some type of search logic would need to be supported with a filtered result list.
Using Identity creating a token in Identity Server4 The Identity properties need to be added to the claims so that the client SPA or whatever client it is can use the properties.
Note: There is another property named “Sms Service” if you would like to use it for sending SMS messages instead of emails. Eventually this link will be sent to the registered user to the email he used in registration, and the user needs to click on it to activate the account, the route “Confirm Email Route” which maps to this activation link is not implemented yet, we’ll implement it the next step.