topoos.DigitalIdentity.Net
7.1.0
See the version list below for details.
dotnet add package topoos.DigitalIdentity.Net --version 7.1.0
NuGet\Install-Package topoos.DigitalIdentity.Net -Version 7.1.0
<PackageReference Include="topoos.DigitalIdentity.Net" Version="7.1.0" />
paket add topoos.DigitalIdentity.Net --version 7.1.0
#r "nuget: topoos.DigitalIdentity.Net, 7.1.0"
// Install topoos.DigitalIdentity.Net as a Cake Addin #addin nuget:?package=topoos.DigitalIdentity.Net&version=7.1.0 // Install topoos.DigitalIdentity.Net as a Cake Tool #tool nuget:?package=topoos.DigitalIdentity.Net&version=7.1.0
topoos.DigitalIdentity.Net
SDK desarrollado en .NET Core 3.1 para el API versión 3.0.0 de Digital Identity de topoos.
El SDK además de implementar las llamadas HTTP y parseo de respuestas dispone de funcionalidad para realizar el flujo Oauth 2.0 contra Digital Identity y facilitar enormemente la integración con el mismo, tal y como veremos más adelante.
Uso
Llamadas HTTP
El SDK dispone de varias clases Manager
, una para cada bloque de operaciones del API, siendo su uso muy similar entre ellas. Todos los managers están diseñados para funcionar conectados tanto al servicio DigitalIdentity de topoos como a una instalación on premise del mismo. A continuación se muestra un ejemplo de uso de cada escenario:
Entorno de topoos
GatewayTokenInfo gatewayToken = new GatewayTokenInfo("Bearer <token>");
/*
* Instanciamos Applications:
* - gatewayToken: configuración del token que nos da el acceso al API (ver documentación de Gateway de topoos).
*/
Applications appsManager = new Applications(gatewayToken);
string clientName = "testClient";
string redirectUrl = "https://exampledomain.com/authorized";
/*
* Invocamos la operación de crear un cliente.
* - clientName: nombre del cliente.
* - redirectUri: url de redirección.
*/
DigitalIdentityClient clientResult = await appsManager.Create(clientName, redirectUrl);
// En DigitalIdentityClient tenemos la respuesta parseada.
Entorno on premise
string serverUrl = "https://exampledomain.com";
string adminToken = "<admin_token>";
// Será necesario añadir este token de autorización si el servicio está protegido por un gateway
// GatewayTokenInfo gatewayToken = null;
/*
* Instanciamos ClientsRestManager:
* - serverUrl: url del API Digital Identity.
* - adminToken: token necesario para ejecutar las operaciones de client.
*/
Applications appsManager = new Clients(serverUrl, adminToken, /* gatewayToken */);
string clientName = "testClient";
string redirectUrl = "https://exampledomain.com/authorized";
/*
* Invocamos la operación de crear un cliente.
* - clientName: nombre del cliente.
* - redirectUri: url de redirección.
*/
DigitalIdentityClient clientResult = await clientManager.Create(clientName, redirectUrl);
// En DigitalIdentityClient tenemos la respuesta parseada.
Integración del flujo Oauth 2.0
El SDK además facilita enormemente integrar el flujo de Oauth 2.0 de forma que una vez configurado, cuando se vaya a acceder a un controlador marcado con la anotación [Authorized]
, se resolverá automáticamente el flujo Oauth 2.0 si el usuario no está logado, y se le acabará proporcionando al usuario su token de acceso.
Configuración de la integración
En primer lugar se deben configurar los parámetros de conexión con el servicio de Digital Identity y los datos del cliente Oauth. Para ello se recomienda hacer un fichero de configuración JSON. Este fichero debe tener la siguiente forma:
{
"DigitalIdentityOptions": {
"BaseUrl": "https://digitalidentity.topoos.com", // url base de la web. Opcional. Valor por defecto: https://digitalidentity.topoos.com
"ServerUrl": "https://api.topoos.com/digitalidentity/1.0.0", // url base del api. Opcional. Valor por defecto: https://api.topoos.com/digitalidentity/1.0.0
"AdminToken": "<admin_token>", // clave de administración del servicio. Obligatorio
"ClientId": "<client_id>", // identificador del cliente Oauth. Obligatorio
"ClientSecret": "<client_secret>", // clave secreta del cliente Oauth. Obligatorio
"ApiKey": "<api_key>", // clave API del cliente Oauth. Obligatorio
"CallbackPath": "/login/authorized", // Endpoint al que se llama una vez logado el usuario. Opcional. Valor por defecto: /login/authorized
"AuthorizationEndpoint": "/oauth/login", // Endpoint de autorización. Opcional. Valor por defecto: /oauth/login
"TokenEndpoint": "/oauth/access_token", // Endpoint de intercambio de código de autorización por token de acceso. Opcional. Valor por defecto: /oauth/access_token
"UserInformationEndpoint": "/who", // Endpoint de consulta de información del usuario/token de acceso. Opcional. Valor por defecto: /who
"GatewayToken": {
"Name": "Authorization", // Nombre de la cabecera de autorización que consulta el Gateway encargado de proteger el acceso a las APIs del bus. Opcional. Valor por defecto: Authorization
"Value": "<gateway_token_value>" // Valor de la cabecera de autorización que consulta el Gateway encargado de proteger el acceso a las APIs del bus. Obligatorio
}
}
}
A continuación se debe configurar el middleware de autenticación en la clase Startup.cs
, utilizando las extensiones proporcionadas por el SDK a este aspecto. Para ello primero configuramos el middleware en la función ConfigureServices
.
public void ConfigureServices(IServiceCollection services) {
...
DigitalIdentityOptions digitalIdentityOptions = new DigitalIdentityOptions();
Configuration.GetSection("DigitalIdentityOptions").Bind(digitalIdentityOptions);
services.AddDigitalIdentity(digitalIdentityOptions);
...
}
A continuación se debe añadir el middleware al flujo de procesamiento de las peticiones HTTP, en la función Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseDigitalIdentity();
...
}
Una vez configurada la integración, cualquier controlador que se marque con la anotación [Authorized]
, estará protegido de forma que el usuario sólo podrá acceder a las operaciones del controlador si está logado, y en caso de no estarlo le aparecerá el formulario de login de Digital Identity.
...
[Authorize]
public class PrivateController : BaseController
{
}
...
Por último, se recomienda añadir un controlador de operaciones de Login para poder invocar el login bajo cualquier condición que se desee y para poder ejecutar la operación de logout:
...
public class LoginController : BaseController
{
public LoginController(ILogger<BaseController> logger, IOptions<ConnectionStrings> connectionStrings, IOptions<KeysSettings> keysSettings, IConfiguration configuration) : base(logger, connectionStrings, keysSettings, configuration) { }
// GET: Login
public ActionResult Index(string returnUrl = "/")
{
return Challenge(new AuthenticationProperties() { RedirectUri = returnUrl });
}
public async Task<ActionResult> Logout()
{
await HttpContext.SignOutAsync();
return RedirectToAction("Index", "Home");
}
}
...
Consulta de datos de usuario
El SDK dispone de la interfaz IIdentityExtractor
que facilita en gran medida la obtención de información del usuario logado. A continuación se incluye un ejemplo en el que se utiliza la mencionada clase en un objeto de tipo ViewComponent
.
...
public class UserInfoViewComponent : ViewComponent
{
private readonly ILogger logger;
private readonly IIdentityExtractor identityExtractor;
public UserInfoViewComponent(ILogger<UserInfoViewComponent> logger, IIdentityExtractor identityExtractor)
{
this.logger = logger;
this.identityExtractor = identityExtractor;
}
public IViewComponentResult Invoke()
{
UserIdentity userIdentity = identityExtractor.GetUserIdentity(UserClaimsPrincipal.Claims);
UserView user = new UserView()
{
Name = userIdentity.Name,
Email = userIdentity.Email,
Status = userIdentity.Status,
};
return View("UserInfo", user);
}
}
...
Contributing & License
Consultar www.solusoft.es 2020 todos los derechos reservados.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
-
.NETCoreApp 3.1
- Microsoft.AspNetCore.Authentication.OpenIdConnect (>= 3.1.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 3.1.8)
- RestSharp (>= 106.11.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
9.2.3 | 80 | 11/4/2024 |
9.2.2 | 159 | 10/31/2024 |
9.2.1 | 76 | 10/31/2024 |
9.2.0 | 70 | 10/31/2024 |
9.1.0 | 6,341 | 12/12/2023 |
9.0.0 | 14,927 | 9/12/2022 |
8.0.5 | 8,064 | 8/25/2022 |
8.0.2 | 890 | 7/21/2022 |
8.0.1 | 1,169 | 6/15/2022 |
8.0.0 | 777 | 6/13/2022 |
7.3.0 | 1,019 | 7/14/2022 |
7.2.0 | 1,104 | 12/13/2021 |
7.1.0 | 29,044 | 11/11/2020 |
7.0.1 | 1,444 | 11/4/2020 |
7.0.0 | 873 | 10/30/2020 |
6.0.0 | 1,651 | 10/21/2020 |
5.0.0 | 863 | 10/5/2020 |
4.0.4 | 853 | 10/2/2020 |
4.0.3 | 854 | 9/29/2020 |
4.0.2 | 1,469 | 9/29/2020 |
4.0.1 | 806 | 9/29/2020 |
4.0.0 | 942 | 9/25/2020 |
3.1.1 | 873 | 9/18/2020 |
3.1.0 | 878 | 9/17/2020 |
3.0.0 | 928 | 9/16/2020 |
2.0.1 | 861 | 9/10/2020 |
2.0.0 | 965 | 9/7/2020 |
1.0.3 | 866 | 9/7/2020 |
1.0.2 | 907 | 8/25/2020 |
1.0.1 | 915 | 8/24/2020 |
1.0.0 | 948 | 8/6/2020 |
0.0.6 | 814 | 8/4/2020 |
0.0.5 | 870 | 8/3/2020 |
0.0.4 | 902 | 8/3/2020 |
0.0.3 | 854 | 8/3/2020 |
0.0.2 | 841 | 7/29/2020 |