diff --git a/Owin.Security.Providers/Owin.Security.Providers.csproj b/Owin.Security.Providers/Owin.Security.Providers.csproj
index d761043..85bd92a 100644
--- a/Owin.Security.Providers/Owin.Security.Providers.csproj
+++ b/Owin.Security.Providers/Owin.Security.Providers.csproj
@@ -219,6 +219,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/Owin.Security.Providers/Yammer/Constants.cs b/Owin.Security.Providers/Yammer/Constants.cs
new file mode 100644
index 0000000..bbdfb29
--- /dev/null
+++ b/Owin.Security.Providers/Yammer/Constants.cs
@@ -0,0 +1,8 @@
+
+namespace Owin.Security.Providers.Yammer
+{
+ internal static class Constants
+ {
+ public const string DefaultAuthenticationType = "Yammer";
+ }
+}
diff --git a/Owin.Security.Providers/Yammer/Provider/IYammerAuthenticationProvider.cs b/Owin.Security.Providers/Yammer/Provider/IYammerAuthenticationProvider.cs
new file mode 100644
index 0000000..00ac549
--- /dev/null
+++ b/Owin.Security.Providers/Yammer/Provider/IYammerAuthenticationProvider.cs
@@ -0,0 +1,21 @@
+using System.Threading.Tasks;
+
+namespace Owin.Security.Providers.Yammer.Provider
+{
+ public interface IYammerAuthenticationProvider
+ {
+ ///
+ /// Invoked whenever Yammer succesfully authenticates a user
+ ///
+ /// Contains information about the login session as well as the user .
+ /// A representing the completed operation.
+ Task Authenticated(YammerAuthenticatedContext context);
+
+ ///
+ /// Invoked prior to the being saved in a local cookie and the browser being redirected to the originally requested URL.
+ ///
+ ///
+ /// A representing the completed operation.
+ Task ReturnEndpoint(YammerReturnEndpointContext context);
+ }
+}
diff --git a/Owin.Security.Providers/Yammer/Provider/YammerAuthenticatedContext.cs b/Owin.Security.Providers/Yammer/Provider/YammerAuthenticatedContext.cs
new file mode 100644
index 0000000..508962b
--- /dev/null
+++ b/Owin.Security.Providers/Yammer/Provider/YammerAuthenticatedContext.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Globalization;
+using System.Security.Claims;
+using Microsoft.Owin;
+using Microsoft.Owin.Security;
+using Microsoft.Owin.Security.Provider;
+using Newtonsoft.Json.Linq;
+
+namespace Owin.Security.Providers.Yammer.Provider
+{
+ ///
+ /// Contains information about the login session as well as the user .
+ ///
+ public class YammerAuthenticatedContext : BaseContext
+ {
+ ///
+ /// Initializes a
+ ///
+ /// The OWIN environment
+ /// The JSON-serialized user
+ /// Yammer Access token
+ public YammerAuthenticatedContext(IOwinContext context, dynamic user, string accessToken) : base(context)
+ {
+ User = user;
+ AccessToken = accessToken;
+ Id = user.id;
+ Name = user.full_name;
+ Url = user.url;
+ Network = user.network_name;
+ if (user.contact.email_addresses != null)
+ {
+ foreach (var eml in user.contact.email_addresses)
+ {
+ if (eml.type == "primary") PrimaryEmail = eml.address;
+ }
+ }
+ }
+
+ ///
+ /// Gets the JSON-serialized user
+ ///
+ ///
+ /// Contains the Yammer user
+ ///
+ public dynamic User { get; private set; }
+
+ ///
+ /// Gets the Yammer access token
+ ///
+ public string AccessToken { get; private set; }
+
+ ///
+ /// Gets the Yammer user ID
+ ///
+ public string Id { get; private set; }
+
+ ///
+ /// Gets the Yammer full_name
+ ///
+ public string Name { get; private set; }
+
+ ///
+ /// Gets the Yammer url
+ ///
+ public string Url { get; private set; }
+
+ ///
+ /// Gets the Yammer Primary Email
+ ///
+ public string PrimaryEmail { get; private set; }
+
+ ///
+ /// Gets the yammer network_name
+ ///
+ public string Network { get; private set; }
+
+ ///
+ /// Gets the representing the user
+ ///
+ public ClaimsIdentity Identity { get; set; }
+
+ ///
+ /// Gets or sets a property bag for common authentication properties
+ ///
+ public AuthenticationProperties Properties { get; set; }
+ }
+}
diff --git a/Owin.Security.Providers/Yammer/Provider/YammerAuthenticationProvider.cs b/Owin.Security.Providers/Yammer/Provider/YammerAuthenticationProvider.cs
new file mode 100644
index 0000000..73ea506
--- /dev/null
+++ b/Owin.Security.Providers/Yammer/Provider/YammerAuthenticationProvider.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Threading.Tasks;
+
+namespace Owin.Security.Providers.Yammer.Provider
+{
+ ///
+ /// Default implementation.
+ ///
+ public class YammerAuthenticationProvider : IYammerAuthenticationProvider
+ {
+ ///
+ /// Initializes a
+ ///
+ public YammerAuthenticationProvider()
+ {
+ OnAuthenticated = context => Task.FromResult