I use the ready-made OpenID mechanism in the dotnet project. This option is characterized by the following: the entire specification mechanism was not implemented by us, we