首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到ApplicationOAuthProvider和HostAuthenticationFilter

找不到ApplicationOAuthProvider和HostAuthenticationFilter
EN

Stack Overflow用户
提问于 2015-04-16 07:18:04
回答 2查看 6K关注 0票数 2

至少有几篇关于WebApi 2授权的文章(如http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api)描述了它们的用法,但我找不到需要包含它们的参考资料。我确实有对Microsoft.Owin/Owin.Security/Owin.Security.OAuth.的引用

帮助?

EN

回答 2

Stack Overflow用户

发布于 2015-04-24 16:52:37

我已经通过安装Microsoft.AspNet.WebApi.Owin包解决了HostAuthenticationFilter问题。

请同时查看How do I get System.Web.Http.Owin?

票数 4
EN

Stack Overflow用户

发布于 2018-08-17 23:27:47

缺省情况下,它放置在项目根文件夹的Providers/ApplicationOAuthProvider.cs

ApplicationOAuthProvider继承自OAuthAuthorizationServerProvider类。

下面是它的实现:

代码语言:javascript
复制
public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
    private readonly string _publicClientId;

    public ApplicationOAuthProvider(string publicClientId)
    {
        //TODO: Pull from configuration
        if (publicClientId == null)
        {
            throw new ArgumentNullException(nameof(publicClientId));
        }

        _publicClientId = publicClientId;
    }

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager();

        var user = await userManager.FindAsync(context.UserName, context.Password);

        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
            OAuthDefaults.AuthenticationType);
        ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
            CookieAuthenticationDefaults.AuthenticationType);

        AuthenticationProperties properties = CreateProperties(user.UserName);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }

    public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    {
        foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
        {
            context.AdditionalResponseParameters.Add(property.Key, property.Value);
        }

        return Task.FromResult(null);
    }

    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        // Resource owner password credentials does not provide a client ID.
        if (context.ClientId == null)
        {
            context.Validated();
        }

        return Task.FromResult(null);
    }

    public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
    {
        if (context.ClientId == _publicClientId)
        {
            Uri expectedRootUri = new Uri(context.Request.Uri, "/");

            if (expectedRootUri.AbsoluteUri == context.RedirectUri)
            {
                context.Validated();
            }
        }

        return Task.FromResult(null);
    }

    public static AuthenticationProperties CreateProperties(string userName)
    {
        IDictionary<string, string> data = new Dictionary<string, string>
        {
            { "userName", userName }
        };
        return new AuthenticationProperties(data);
    }
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29662627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档