MCPcopy Create free account
hub / github.com/modelcontextprotocol/go-sdk / TestRequireBearerToken

Function TestRequireBearerToken

auth/auth_test.go:192–286  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

190}
191
192func TestRequireBearerToken(t *testing.T) {
193 verifier := func(_ context.Context, token string, _ *http.Request) (*TokenInfo, error) {
194 if token == "valid" {
195 return &TokenInfo{Expiration: time.Now().Add(time.Hour), Scopes: []string{"read"}}, nil
196 }
197 return nil, ErrInvalidToken
198 }
199
200 tests := []struct {
201 name string
202 opts *RequireBearerTokenOptions
203 authHeader string
204 wantHeader string
205 wantStatus int
206 }{
207 {
208 name: "no middleware options",
209 opts: nil,
210 authHeader: "Bearer invalid",
211 wantHeader: "",
212 wantStatus: http.StatusUnauthorized,
213 },
214 {
215 name: "metadata only",
216 opts: &RequireBearerTokenOptions{
217 ResourceMetadataURL: "https://example.com/resource-metadata",
218 },
219 authHeader: "Bearer invalid",
220 wantHeader: "Bearer resource_metadata=\"https://example.com/resource-metadata\"",
221 wantStatus: http.StatusUnauthorized,
222 },
223 {
224 name: "scopes only",
225 opts: &RequireBearerTokenOptions{
226 Scopes: []string{"read", "write"},
227 },
228 authHeader: "Bearer invalid",
229 wantHeader: "Bearer scope=\"read write\"",
230 wantStatus: http.StatusUnauthorized,
231 },
232 {
233 name: "metadata and scopes",
234 opts: &RequireBearerTokenOptions{
235 ResourceMetadataURL: "https://example.com/resource-metadata",
236 Scopes: []string{"read", "write"},
237 },
238 authHeader: "Bearer invalid",
239 wantHeader: "Bearer resource_metadata=\"https://example.com/resource-metadata\", scope=\"read write\"",
240 wantStatus: http.StatusUnauthorized,
241 },
242 {
243 name: "insufficient scope",
244 opts: &RequireBearerTokenOptions{
245 Scopes: []string{"admin"},
246 },
247 authHeader: "Bearer valid", // Has "read", needs "admin" -> 403
248 wantHeader: "Bearer scope=\"admin\"",
249 wantStatus: http.StatusForbidden,

Callers

nothing calls this directly

Calls 3

RequireBearerTokenFunction · 0.85
RunMethod · 0.80
ServeHTTPMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…