Authentication/Authorization is extremely complex and many user written schemes can be easily hacked. Would sggest using a framework that is tried and trusted (eg IdentityServer or OAuth). Even Google got it wrong with authentication scheme in Google+ and have decided to pull it completely
Since solutions may need to migrate to cloud it would be best to ensure the functionality below works with Microsoft Identity tables without modification. They can be changed later though the Identity system is not built to easily cope with table changes in tables other than AspNetUsers and you would need to be painstakingly accurate in constructing a working context for the Entity Frameworks to behave correctly.
Authenticate (Gets the user’s information if any exists (e.g. decoding the user’s cookie, if one exists)
Challenge (Requests authentication by the user (e.g. showing a login page)
SignIn (Persists the user’s information somewhere (e.g. writes a cookies)
SignOut (Removes the user’s persisted information (e.g. deletes the cookies)
Forbid (Denies access to a resource for unauthenticated users or authenticated but unauthorized users (e.g. displaying a “not authorized” page)for unauthenticated users or authenticated but unauthorized users (e.g. displaying a “not authorized” page))
One place to start isVisual Studio 2017 with a new project and authentication set to Individual User Accounts. Use NuGet to install Microsoft.AspNetCore.Identity.UI and then Scaffold the razor pages that implement the above functionality (right-lick project and select Add => New Scaffolded Item => Identity). Remember classes methods are protected by adding [Authorize] in controllers. Compare this project with one without Identity using just cookies. The important thing is to make your implementation as pluggable as possible perhaps using the Microsoft Identity (since you will be accessing tables produced specifically for Identity)so will work with ASP.NET, ASP.NET Core.
As a minimum you need 2 unprotected endpoints to give acess to an Authenticate() method in both the Sign On component and the Applications that are going to be signed in and out. When signed in the protected components could be accessed by shared cookie, or token passed in Authorize header or url. The Application can extract information from a cookie/token and check whether the user is in the AspNetUsers table and allow access or redirect to a Login page or Access denied page. The Authenticate() method in the sign on needs to create a cookie or token (or both). The Authenticate() method in the application needs to read and verify this information. The following schemes are supported by Microsoft Identity so take your pick.
Cookies
Facebook
Google
Internal
JwtBearer
MicrosoftAccount
OAuth
OpenIdConnect
Twitter