diff --git a/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationHandler.cs b/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationHandler.cs index e6a2191..2d7e479 100644 --- a/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationHandler.cs +++ b/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationHandler.cs @@ -123,6 +123,22 @@ namespace Owin.Security.Providers.LinkedIn context.Identity.AddClaim(new Claim(ClaimTypes.Name, context.Name, XmlSchemaString, Options.AuthenticationType)); context.Identity.AddClaim(new Claim("urn:linkedin:name", context.Name, XmlSchemaString, Options.AuthenticationType)); } + if (!string.IsNullOrEmpty(context.Industry)) + { + context.Identity.AddClaim(new Claim("urn:linkedin:industry", context.Industry, XmlSchemaString, Options.AuthenticationType)); + } + if (!string.IsNullOrEmpty(context.Positions)) + { + context.Identity.AddClaim(new Claim("urn:linkedin:positions", context.Positions, XmlSchemaString, Options.AuthenticationType)); + } + if (!string.IsNullOrEmpty(context.Summary)) + { + context.Identity.AddClaim(new Claim("urn:linkedin:summary", context.Summary, XmlSchemaString, Options.AuthenticationType)); + } + if (!string.IsNullOrEmpty(context.Headline)) + { + context.Identity.AddClaim(new Claim("urn:linkedin:headline", context.Headline, XmlSchemaString, Options.AuthenticationType)); + } if (!string.IsNullOrEmpty(context.Link)) { context.Identity.AddClaim(new Claim("urn:linkedin:url", context.Link, XmlSchemaString, Options.AuthenticationType)); diff --git a/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationOptions.cs b/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationOptions.cs index 0f5ca6c..02aa95c 100644 --- a/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationOptions.cs +++ b/src/Owin.Security.Providers.LinkedIn/LinkedInAuthenticationOptions.cs @@ -119,7 +119,11 @@ namespace Owin.Security.Providers.LinkedIn "formatted-name", "email-address", "public-profile-url", - "picture-url" + "picture-url", + "industry", + "headline", + "summary", + "positions" }; BackchannelTimeout = TimeSpan.FromSeconds(60); } diff --git a/src/Owin.Security.Providers.LinkedIn/Provider/LinkedInAuthenticatedContext.cs b/src/Owin.Security.Providers.LinkedIn/Provider/LinkedInAuthenticatedContext.cs index 437ce61..34ed2d8 100644 --- a/src/Owin.Security.Providers.LinkedIn/Provider/LinkedInAuthenticatedContext.cs +++ b/src/Owin.Security.Providers.LinkedIn/Provider/LinkedInAuthenticatedContext.cs @@ -7,6 +7,7 @@ using Microsoft.Owin; using Microsoft.Owin.Security; using Microsoft.Owin.Security.Provider; using Newtonsoft.Json.Linq; +using Newtonsoft.Json; namespace Owin.Security.Providers.LinkedIn { @@ -41,6 +42,10 @@ namespace Owin.Security.Providers.LinkedIn Link = TryGetValue(user, "publicProfileUrl"); UserName = TryGetValue(user, "formattedName").Replace(" ", ""); Email = TryGetValue(user, "emailAddress"); + Industry = TryGetValue(user, "industry"); + Summary = TryGetValue(user, "summary"); + Headline = TryGetValue(user, "headline"); + Positions = TryGetValueAndSerialize(user, "positions"); } /// @@ -87,6 +92,28 @@ namespace Owin.Security.Providers.LinkedIn /// public string FamilyName { get; private set; } + /// + /// Describes the users membership profile + /// + public string Summary { get; private set; } + + /// + /// Industry the member belongs to + /// https://developer.linkedin.com/docs/reference/industry-codes + /// + public string Industry { get; set; } + + /// + /// The members headline + /// + public string Headline { get; set; } + + /// + /// Member's current positions + /// https://developer.linkedin.com/docs/fields/positions + /// + public string Positions { get; set; } + public string Link { get; private set; } /// @@ -109,5 +136,11 @@ namespace Owin.Security.Providers.LinkedIn JToken value; return user.TryGetValue(propertyName, out value) ? value.ToString() : null; } + + private static string TryGetValueAndSerialize(JObject user, string propertyName) + { + JToken value; + return user.TryGetValue(propertyName, out value) ? JsonConvert.SerializeObject(value) : null; + } } }