ASP.NET Web Api: How to pass an access token (oAuth 2.0) using URL parameter?

后端 未结 3 850
悲&欢浪女
悲&欢浪女 2020-12-24 07:36

Do you have any idea how I can use, an access_token generated by the default asp.net web api 2 OAuth 2 authorization mechanism, in the url parameters. Currently I am able to

3条回答
  •  一个人的身影
    2020-12-24 07:47

    Well - I agree that the header is a much better alternative - but there are of course situations where the query string is needed. The OAuth2 spec defines it as well.

    Anyways - this feature is built into the Katana OAuth2 middleware:

    http://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/

    public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
    {
        readonly string _name;
    
        public QueryStringOAuthBearerProvider(string name)
        {
            _name = name;
        }
    
        public override Task RequestToken(OAuthRequestTokenContext context)
        {
            var value = context.Request.Query.Get(_name);
    
            if (!string.IsNullOrEmpty(value))
            {
                context.Token = value;
            }
    
            return Task.FromResult(null);
        }
    }
    
    
    

    And then:

    var options = new JwtBearerAuthenticationOptions
    {
        AllowedAudiences = new[] { audience },
        IssuerSecurityTokenProviders = new[]
            {
                new SymmetricKeyIssuerSecurityTokenProvider(
                    issuer,
                    signingKey)
            },
        Provider = new QueryStringOAuthBearerProvider(“access_token”)
    };
    

    提交回复
    热议问题