Code Example:
Der folgende Code zeigt, wie man die eigene UserID als GUID von einem Asp Webserver in einer SPA Client Anwendung ermitteln kann, um Daten auszuwerten.
Angular, Typescript, Asp Core .Net5 Web API, Microsoft ASP Server Identity
UserID von Identity-Server abfragen aus Angular App, SPA Frontend in Asp Core .Net5
load_userID() { //--------< load_userID() >-------- //*load own userid as guid and check if the article is own, owner this.dataService.get_UserIdGuid().subscribe(response => { //console.log("get_UserIdGuid()=" + response); //console.log("article=" + JSON.stringify(this.article));
this.iduserguid = response; if(this.article.iduserguid==this.iduserguid){ this.isOwner=true; } else { this.isOwner=false; } } ); //--------</ load_userID() >-------- } |
API Request
Im Angular component service (hier article.service.ts)
Wird dann mit http ein API Request an den ASP Core API Server gesendet.
Dieser gibt den MS Identity User als GUID in Json Format zurück. Hier in Angular/Typescript Observable und httpClient
useridguid: "1428ca0b-186c-43c8-8ec6-08d26e97e83b"
get_UserIdGuid(): Observable<string> { //----< get_UserIdGuid >---- //useridguid: "1428ca0b-186c-43c8-8ec6-08d26e97e83b" return this.http .get<{useridguid}>(this.url_Api_Base + "get_UserIdGuid" ) .pipe( map(({useridguid})=>{ return useridguid } ) ) //----</ get_UserIdGuid >---- } |
Im Asp Core Server ist eine API Methode hinterlegt, welche einen Eingeloggten User als GUID zurück geben kann
// GET: api/getuserid/5 ============👁 // EventsController [Authorize] [Route("get_UserIdGuid")] [HttpGet("get_UserIdGuid")] public async Task<ActionResult<string>> get_UserIdGuid() { //-------------< Liste: GetArticles >-------------
//--< Get User ID >-- //internal referenz-Number for tracking in tables String sIDUserGuid = User.getUserIdGuid(); //*ID in aspUsers wie: 1428ca0b-186c.. if (sIDUserGuid == "") return BadRequest(); //--</ Get User ID >--
return new JsonResult(new { useridguid= sIDUserGuid }); //-------------</ Liste: GetArticles >------------- } |
Hierzu muss man auf dem ASP Server eine static Methode hinterlegen, welche die Identity User Claims auslesen kann
//< Using > using System.Security.Claims; //</ Using >
public static class UserInfo_Methods { //-------------< Class: ExtensionMethods >------------- public static string getUserIdGuid(this ClaimsPrincipal user) { //------------< getUserId(User) >------------ //*returns the current UserID if (!user.Identity.IsAuthenticated) return null;
ClaimsPrincipal currentUser = user;
//< output > return currentUser.FindFirst(ClaimTypes.NameIdentifier).Value; //</ output > //------------</ getUserId(User) >------------ } |